Python——数据存储:JSON操作

  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

时间: 2024-08-03 09:55:12

Python——数据存储:JSON操作的相关文章

Apache Spark-1.0.0浅析(十):数据存储——读写操作

“RDD是由不同的partition组成的,transformation和action是在partition上面进行的:而在storage模块内部,RDD又被视为由不同的block组成,对于RDD的存取是以block为单位进行的,本质上partition和block是等价的,只是看待的角度不同.在Spark storage模块中中存取数据的最小单位是block,所有的操作都是以block为单位进行的.” BlockManager中定义了三种主要的存储类型(tackyonStore暂且不做分析)

python数据序列化---json &amp; pickle

json & pickle数据序列化 序列化: 就是列表,字典等数据类型转乘字符串存入文本文件 反序列: 就是字符串从文本读出来后通过一种方法转化为列表,字典等数据类型.例如eval() json通用的:只能处理一些简单的数据类型:json: 序列化和反序列化函数: 案例1:  import json  info = {   "name": "brace",   "age": 22,  }  json_str = json.dumps(i

Android数据存储-文件操作

一.预备知识 1.Android中的MVC设计模式 MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器.一个逻辑模型可以对于多种视图模型,比如一批统计数据你可以分别用柱状图.饼图来表示.一种视图模型也可以对于多种逻辑模型.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,而C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,这与<设计模式>中的观察者模式是完全一样. MVC好处:从用户的角度出发,用户可

python数据存储-- CSV

CSV,其文件以纯文本形式存储表格数据(数字和文本),CSV记录简由某种换行符分隔字段间分隔又其他字符,常见逗号或者制表符, 例如: #coding:utf-8 import csv headers = ['ID','UserName','Password','Age','Country'] rows = [(1001,"guobao","1382_pass",21,"China"), (1002,"Mary","M

IOS NSUserDefaults-轻量级本地数据存储

IOS NSUserDefaults-轻量级本地数据存储 IOS 针对用户数据持久化处理提供了多种处理方式:NSUserDefaults.plist 以及 sqlite3 数据库 都是很不错的选择! NSUserDefaults 是一种轻量级本地数据存储,操作方便,但仅支持Bool.Float.NSInteger.Object.Double.Url 这六种数据类型的存储 NSUserDefaults 提供了添加.读取以及移除等方法,供开发者调用,具体示例如下: GNSUserDefaults.h

cocos2dx基础篇(20)——数据存储CCUserDefault

[唠叨] 一个游戏怎么能没有游戏存档呢?在cocos2dx中也提供了一个数据存储类CCUserDefault,可以作为一个轻量级的数据库来使用. 它支持五种数据bool.int.float.double.string的存储. [致谢] http://gl.paea.cn/contents/252ac3e59bc18069.html [CCUserDefault] CCUserDefault类和之前讲的CCDirector.SimpleAudioEngine一样,都是采用单例模式. 可以通过sha

Cocos2d-x数据篇01:UserDefault数据存储

尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2418 [前言] 一个游戏怎么能没有游戏存档呢?在Cocos2d-x中也提供了一个数据存储类CCUserDefault,可以作为一个轻量级的数据库来使用.它支持五种数据bool.int.float.double.string的存储. [Demo下载] UserDefault数据存储 [Cocos2d-x 3.x] (1)去掉 “CC” (2)获取单例:sharedUserDefault() 改为 get

Python数据库 5.json,hashlib,base64模块

5.1 json JS对象 var teacher_1 = {   name: ‘juhao’,   age: 18, feature : [‘高’, ‘富’, ‘帅’]} JSON字符串 {   “name”: “juhao”,   “age”: 18, “ feature “ : [‘高’, ‘富’, ‘帅’]?} Python字典 {   ‘name’: ‘juhao’,   ‘age’: 18 ‘feature’ : [‘高’, ‘富’, ‘帅’]?} 注意 1.字符串必须用双引号(即:

python之json数据存储

# 数据存储:json.dump()和json.load() # date:2017-07-17 import json file_name = 'D:/json_file.txt' nums = [3, 4, 5, 7, 1, 9] # nums = {"name": "Mike", "age": 12} with open(file_name, 'w') as file_obj: '''写入json文件''' json.dump(nums,