JSON格式的数据格式广泛使用在各种应用中,比XML格式更轻量级,所以现在很多应用都选择JSON格式保存数据,尤其是需要通过网络传输(如socket传输)数据时,这对于移动应用更具有优势。JSON格式数据比XML格式的数据量更小,所以传输速度更快,也更节省数据流量(省钱),因此,在移动APP应用中,几乎都是采用了JSON格式。

  JSON格式的数据可以保存数组和对象。JSON数组用一对中括号'[  ]'将数据括起来;JSON对象用一对大括号'{  }'将数据括起来。本文介绍JSON字符串与字典的互相转换、JSON字符串与类实例互转、JSON与XML互转等知识点。

一、JSON字符串与字典互转实例

import json

#定义一个字典datadict = {    'name':'Bill',    'company':'Microsoft',    'age':34    }#定义一个列表datalist =[20,'names',     {'name':'Bill','age':30,'salary':2000},     {'name':'Chen','age':40,'salary':3000},     {'name':'Ling','age':50,'salary':4000}     ]

# 将字典转换为json字符串jsonstr1 = json.dumps(datadict)print(jsonstr1)  print('-----------------------')#输出:{"company": "Microsoft", "name": "Bill", "age": 34}
# 将列表转换为json字符串jsonstr2 = json.dumps(datalist)print(jsonstr2)  #输出:{"company": "Microsoft", "name": "Bill", "age": 34}print('-----------------------')#输出:[20, "names", {"age": 30, "name": "Bill", "salary": 2000}, {"age": 40, "name": "Chen", "salary": 3000}, {"age": 50, "name": "Ling", "salary": 4000}]

# 将JSON字符串转成字典data = json.loads(jsonstr1)print(type(data))print(data)# 输出字典:{'company': 'Microsoft', 'name': 'Bill', 'age': 34}
# 将JSON字符串转成列表data = json.loads(jsonstr2)print(type(data))print(data)
二、JSON字符串与类实例互转(一)Json串转为类实例
# 1、用类实例class Product:    def __init__(self, d):        self.__dict__ = d

# f = open('./files/product.json','r')# jsonstr = f.read()

jsonstr = '''            {"name":"iPhone9",            "price":9999,            "count":3000            }      '''
my1 = json.loads(jsonstr,object_hook=Product)print(my1.__dict__)print('name={}'.format(my1.name))print('price={}'.format(my1.price))print('count={}'.format(my1.count))print('------------------------------')

# 2、用回调函数def jsontoProduct(d):    return Product(d)

my2 = json.loads(jsonstr,object_hook=jsontoProduct)print(my2.__dict__)print('name={}'.format(my2.name))print('price={}'.format(my2.price))print('count={}'.format(my2.count))

# f.close()

# 输出:'''

{'count': 3000, 'price': 9999, 'name': 'iPhone9'}
name=iPhone9
price=9999
count=3000
------------------------------
{'count': 3000, 'price': 9999, 'name': 'iPhone9'}
name=iPhone9
price=9999
count=3000

'''

(二)类实例转成JSON串

class Product:    def __init__(self,name,price,count):        self.name = name        self.price = price        self.count = count

def producttoDict(obj):    return {        'name':obj.name,        'price':obj.price,        'count':obj.count    }product = Product('特斯拉',30000000,10)jsonstr = json.dumps(product,default=producttoDict,ensure_ascii=False)print(jsonstr)#输出:{"name": "特斯拉", "count": 10, "price": 30000000}

(三)类实例列表与JSON串互转
# f = open('./files/products.json','r',encoding='utf-8')# jsonstr = f.read()jsonstr = '''            [                {                "name":"iPhone9",                "price":9999.9,                "count":2000                },                {                "name":"特斯拉",                "price":1000000,                    "count":123                }               ]                    '''

class Product:    def __init__(self, d):        self.__dict__ = dproducts = json.loads(jsonstr,object_hook=Product)

for p in products:    print('name={}'.format(p.name))    print('price={}'.format(p.price))    print('count={}'.format(p.count))    print('====================')# f.close()

def producttoDict(product):    return {        'name':product.name,        'price':product.price,        'count':product.count    }jsonstr2 = json.dumps(products,default=producttoDict,ensure_ascii=False)print(jsonstr2)
# 输出:'''

name=iPhone9
price=9999.9
count=2000
====================
name=特斯拉
price=1000000
count=123
====================
[{"price": 9999.9, "name": "iPhone9", "count": 2000}, {"price": 1000000, "name": "特斯拉", "count": 123}]

'''

三、JSON格式与XML格式互转

import jsonimport dicttoxmlimport xmltodict

# f=open('./files/products.json','r',encoding='utf-8')# jsonstr = f.read()jsonstr = '''            [                {                "name":"iPhone9",                "price":9999.9,                "count":2000                },                {                "name":"特斯拉",                "price":1000000,                    "count":123                }               ]                    '''dicts = json.loads(jsonstr)# f.close()print('1、------------------------')print(dicts)print('2、------------------------')xmlstr = dicttoxml.dicttoxml(dicts).decode('utf-8')print(xmlstr)print('3、-------------------------')

dict2 = xmltodict.parse(xmlstr)  #字典jsonstr2 = json.dumps(dict2)print(jsonstr2)dict3 = json.loads(jsonstr2)print(type(dict3))print(dict3)for li in dict3['root']['item']:    print(li['name']['#text'])    print(li['price']['#text'])    print(li['count']['#text'])    print('-----------------')

# 输出:'''

1、------------------------

[{'count': 2000, 'price': 9999.9, 'name': 'iPhone9'}, {'count': 123, 'price': 1000000, 'name': '特斯拉'}]
2、------------------------
<?xml version="1.0" encoding="UTF-8" ?><root><item type="dict"><count type="int">2000</count><price type="float">9999.9</price><name type="str">iPhone9</name></item><item type="dict"><count type="int">123</count><price type="int">1000000</price><name type="str">特斯拉</name></item></root>
3、-------------------------
{"root": {"item": [{"@type": "dict", "count": {"@type": "int", "#text": "2000"}, "price": {"@type": "float", "#text": "9999.9"}, "name": {"@type": "str", "#text": "iPhone9"}}, {"@type": "dict", "count": {"@type": "int", "#text": "123"}, "price": {"@type": "int", "#text": "1000000"}, "name": {"@type": "str", "#text": "\u7279\u65af\u62c9"}}]}}
<class 'dict'>
{'root': {'item': [{'@type': 'dict', 'price': {'@type': 'float', '#text': '9999.9'}, 'name': {'@type': 'str', '#text': 'iPhone9'}, 'count': {'@type': 'int', '#text': '2000'}}, {'@type': 'dict', 'price': {'@type': 'int', '#text': '1000000'}, 'name': {'@type': 'str', '#text': '特斯拉'}, 'count': {'@type': 'int', '#text': '123'}}]}}
iPhone9
9999.9
2000
-----------------
特斯拉
1000000
123
-----------------

'''

参考文献:1、《python从菜鸟到高手》,作者:李宁
 

转载于:https://www.cnblogs.com/chenhaiming/p/9882205.html

Python——数据存储:JSON操作相关推荐

  1. python 保存csv,Python数据存储到文件的3种方式

    原标题:Python数据存储到文件的3种方式 爬虫请求解析后的数据,需要保存下来,才能进行下一步的处理,一般保存数据的方式有如下几种: 文件:txt.csv.excel.json等,保存数据量小. 关 ...

  2. 跟李宁老师学Python视频课程(14):Python数据存储-李宁-专题视频课程

    跟李宁老师学Python视频课程(14):Python数据存储-109人已学习 课程介绍         本系列课程一共20套,每一套视频课程会深入讲解Python的一类知识点.Python是当今炙手 ...

  3. Python 数据存储读取,6千字搞定各种方法

    作者 | 老表 来源 | 简说Python 一.前言 二.专栏概要 三.做准备:将爬取到的数据存入csv和mysql.其他数据库 3.1 前情回顾 3.1 数据存入+读取csv 3.2 数据存入+读取 ...

  4. Python数据存储与压缩

    Python数据存储与压缩   跑实验要用到数据集,对于一些不大的数据集,为了节省时间,有时候会先预处理,然后将各个文件存储成一个大文件,一次性读入内存,省去了每个迭代重新读入和重新预处理的时间.这里 ...

  5. python存储-Python数据存储之 h5py详解

    1.Python数据存储(压缩) (1)numpy.save , numpy.savez , scipy.io.savemat numpy和scipy内建的数据存储方式. (2)cPickle + g ...

  6. ​DMBOK知识梳理for CDGA/CDGP——第六章 数据存储与操作(附常考知识点)

    第六章 数据存储与操作 第六章在CDGA|CDGP考试中的分值占比较少,知识点比较密集,主要考点包括:数据存储与操作的定义.目标.数据库管理员(DBA)的角色定位及类型.数据处理的类型ACID和BAS ...

  7. python数据存储系列教程——python对象与json字符串的相互转化,json文件的存储与读取

    全栈工程师开发手册 (作者:栾鹏) python教程全解 在json字符串和python对象的相互转化中,会进行下列变换. 会将python中字典的写法,转化为js中对象的写法.(没有区别). 会将p ...

  8. Python数据存储的两种TXT、JSON格式

    数据保存的方式多种多样,最简单的形式是直接保存成文本文件,比如txt/json/csv-另外还可以保存到数据库----关系型数据库–Mysql MSsql,非关系型数据库 MongoDB.Redis- ...

  9. 以下用于数据存储领域的python第三方库是-Python数据存储及表示

    [http://naotu.baidu.com/file/15cbc506e3da5e640a40659058d5be24?token=873f2ab3461d8f9a](http://naotu.b ...

  10. python数据存储用什么_Python的小数据存储,用什么格式更有逼格?

    小数据存储 我们在编写代码的时候,经常会涉及到数据存储的情况,如果是爬虫得到的大数据,我们会选择使用数据库,或者excel存储.但如果只是一些小数据,或者说关联性较强且存在存储后复用的数据,我们该如何 ...

最新文章

  1. OneFlow系统设计
  2. mysql查看数据库创建语句_mysql-模糊查找数据库和查看数据库的创建语句
  3. Ubuntu 14.04环境变量修改
  4. 深入理解分布式技术 - 负载均衡实现之一致性哈希算法
  5. 那些永不消逝的进程 (转)
  6. 华南理工大学 高级程序设计语言 c++ ,2017华南理工大学网络教育《高级语言程序设计C++》平时作业...
  7. BZOJ 1053 [HAOI2007]反素数ant
  8. 应对「高并发」的思路
  9. Centos6.5下通过shell脚本快速安装samba服务器
  10. 【声波传钱】支付宝新功能 “声波支付” 自动售货机已投入试运
  11. 转一篇:如何快速的修改参考文献
  12. linux系统编程 -- 僵尸进程 孤儿进程
  13. Unity 提取资源 Disunity、Unity Studio
  14. Java程序编写 • 【第4章 程序:随机本周菜品;简易计算器】
  15. scrapy框架—spiders
  16. vue上传图片限制格式以及尺寸大小
  17. h5底部输入框被键盘遮挡_总结几个移动端H5软键盘的大坑【实践】
  18. android 解压rar5,rar解压软件安卓中文
  19. 共享特定特征转移的跨模态人员重识别
  20. 联网下载jar包导入本地Maven库

热门文章

  1. CPU虚拟化的常见技术
  2. 3-4笔刷的详细设定
  3. 分布式系统认证方案_分布式系统介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记134
  4. C#.Net工作笔记009---c#中Yield Return语法的作用和好处
  5. Linux学习笔记016---CentOS7虚拟机设置使用静态IP上网_配置集群的时候可以用
  6. 编程杂谈---vb,vb.net,java数据类型区分
  7. Windows 下 C/C++ 多线程编程入门参考范例
  8. assertion failed:Path for IClasspathEntry must be absolute
  9. 随想录(用python开发网站)
  10. 随想录(从开源的宝库中学习)