赞
踩
目录
JSON库是 Python 内置的一个用于操作 JSON 数据的库,提供了几个函数用于解析与生成(或者说反序列化与序列化)JSON 格式的数据。
JSON库提供了一个函数loads
,用于从 Python 的字符串中解析 JSON 数据。使用它的方法很简单,只需将含有 JSON 数据的字符串当做参数传递给它,它的返回值就是由 Python 中的基础数据类型组成的对象。
- import json
- data = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
- text = json.loads(data)
- print(text)
得到的结果是:
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
JSON 的对象类型转换成了 Python 的dict类型。
JSON 各种数据类型在解析后,对应的 Python 基础数据类型如下表:
JSON | Python |
---|---|
object(对象) | dict |
array(数组) | list |
string(字符串) | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
JSON 数据类型转化成 Python 数据类型后,就可以按照 Python 的方式来使用了:
- import json
- data = '[1,2,3]';
- text = json.loads(data)
- text.append(4) #调用list的append函数
- print(text)
得到的结果是:
[1, 2, 3, 4]
JSON 库的另一个函数 load
也是用于解析 JSON 数据的,它与 loads
函数唯一不同的地方在于,它是从文件中解析,比如:
- import json
- data = open("test.txt","r",encoding = "utf-8")
- text = json.load(data) #将文件对象传递给load函数
- print(text)
- fp.close()
这样 test.txt
文件内的内容,就会被当做 JSON 格式的数据来解析。
注意:
load
函数没有可选参数encoding
,只要文件对象使用了正确的字符编码打开文件,load
函数就可以正确的解析数据。
与解析的那两个函数相对应,json
库也提供了两个函数:dumps
和 dump
,来将由 Python 基础数据类型组成的对象转化成 JSON 数据,使用方法也类似:
- import json
-
- data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
-
- json = json.dumps(data) #转化成JSON格式的字符串
- print(json)
得到的结果是:
[{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
注意:这是一个字符串
dumps
没有可选参数encoding
,当要转化的对象含有中文等非 ASCII 字符时,建议指定可选参数ensure_ascii
为False
。否则非 ASCII 的字符将会被显示成\uXXXX
的形式。
有一个字符编码为 utf-8
的数据文件 step2/2017.txt
:
- {"count":3 ,
- "infos":
- [
- {"name":"赵昊" , "age":15 ,"height": 1.83, "sex" : "男性" },
- {"name":"龙傲天" , "age":16 ,"height": 2.00, "sex" : "男性"},
- {"name":"玛丽苏" , "age":15 ,"height": 1.78, "sex" : "女性"}
- ]
- }
将其按 JSON 格式解析后,将
infos
数组内的三个对象的年龄age
增加一岁,然后增加一条记录:
- 名称:叶良辰,年龄:17,身高:1.87,男性
同时,将
count
的值从3
改为4
。注意:所有打开的文件,请在打开文件的函数内及时关闭,以免影响测试代码读取数据。
以 JSON 格式解析 step2/2018.txt
的内容,并将其中的数据打印出来。 如果内容成功解析,并且数据填写正确,将会有如下结果输出:
学生数:4
名称:赵昊,年龄:16,身高:1.83,男性
名称:龙傲天,年龄:17,身高:2.00,男性
名称:玛丽苏,年龄:16,身高:1.78,女性
名称:叶良辰,年龄:17,身高:1.87,男性
该题首先让我们将JSON数据转化为Python数据进行操作,利用load函数操作之后他会转换成一个大的字典(dict),字典名为obj,字典内还有一个键值对{“count”:3},和一个名为infos的大的列表,该列表内含有三个小字典,修改键值对直接赋值即可,修改列表内嵌套的字典,直接用下表+key即可,增加列表元素用append()函数,记得增加字典。
- import json
-
- def Func():
- data = open("step2/2017.txt","r",encoding = "utf-8")
-
- obj = json.load(data)
-
- data.close()
-
- #********** Begin *********#
- obj["count"]=4
- #修改键值对,把学生数从3改为4
- obj["infos"][0]["age"]=16
- obj["infos"][1]["age"]=17
- obj["infos"][2]["age"]=16
- obj["infos"].append({"name":"叶良辰","age":17,"height":1.87,"sex":"男性"})
-
- #********** End **********#
- output = open("step2/2018.txt","w",encoding = "utf-8")
- json.dump(obj,output) #输出到文件
- output.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。