当前位置:   article > 正文

Python--JSON基础_将其按 json 格式解析后,将 infos 数组内的三个对象的年龄 age 增加一岁,然后增加

将其按 json 格式解析后,将 infos 数组内的三个对象的年龄 age 增加一岁,然后增加

目录

1.基本介绍

1.1相关知识

1.2解析 JSON 数据

1.3从文件解析JSON数据

1.4生成 JSON 数据

2.案例分析 

2.1案例介绍

 2.2原理分析

2.3代码展示 


1.基本介绍

1.1相关知识

JSON库是 Python 内置的一个用于操作 JSON 数据的库,提供了几个函数用于解析生成(或者说反序列化序列化)JSON 格式的数据。

1.2解析 JSON 数据

JSON库提供了一个函数loads,用于从 Python 的字符串中解析 JSON 数据。使用它的方法很简单,只需将含有 JSON 数据的字符串当做参数传递给它,它的返回值就是由 Python 中的基础数据类型组成的对象。

  1. import json
  2. data = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
  3. text = json.loads(data)
  4. print(text)

得到的结果是:{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} 

JSON 的对象类型转换成了 Python 的dict类型。

JSON 各种数据类型在解析后,对应的 Python 基础数据类型如下表:

JSONPython
object(对象)dict
array(数组)list
string(字符串)unicode
number (int)int, long
number (real)float
trueTrue
falseFalse
nullNone

 JSON 数据类型转化成 Python 数据类型后,就可以按照 Python 的方式来使用了:

  1. import json
  2. data = '[1,2,3]';
  3. text = json.loads(data)
  4. text.append(4) #调用list的append函数
  5. print(text)

得到的结果是:[1, 2, 3, 4] 

1.3从文件解析JSON数据

JSON 库的另一个函数 load 也是用于解析 JSON 数据的,它与 loads 函数唯一不同的地方在于,它是从文件中解析,比如: 

  1. import json
  2. data = open("test.txt","r",encoding = "utf-8")
  3. text = json.load(data) #将文件对象传递给load函数
  4. print(text)
  5. fp.close()

这样 test.txt 文件内的内容,就会被当做 JSON 格式的数据来解析。

注意:load 函数没有可选参数 encoding ,只要文件对象使用了正确的字符编码打开文件,load 函数就可以正确的解析数据。 

1.4生成 JSON 数据

与解析的那两个函数相对应,json 库也提供了两个函数:dumpsdump ,来将由 Python 基础数据类型组成的对象转化成 JSON 数据,使用方法也类似:

  1. import json
  2. data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
  3. json = json.dumps(data) #转化成JSON格式的字符串
  4. print(json)

得到的结果是:[{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]

 注意:这是一个字符串

dumps 没有可选参数 encoding ,当要转化的对象含有中文等非 ASCII 字符时,建议指定可选参数 ensure_asciiFalse 。否则非 ASCII 的字符将会被显示成 \uXXXX 的形式。

2.案例分析 

2.1案例介绍

有一个字符编码为 utf-8 的数据文件 step2/2017.txt : 

  1. {"count":3 ,
  2. "infos":
  3. [
  4. {"name":"赵昊" , "age":15 ,"height": 1.83, "sex" : "男性" },
  5. {"name":"龙傲天" , "age":16 ,"height": 2.00, "sex" : "男性"},
  6. {"name":"玛丽苏" , "age":15 ,"height": 1.78, "sex" : "女性"}
  7. ]
  8. }

将其按 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,男性

 2.2原理分析

该题首先让我们将JSON数据转化为Python数据进行操作,利用load函数操作之后他会转换成一个大的字典(dict),字典名为obj,字典内还有一个键值对{“count”:3},和一个名为infos的大的列表,该列表内含有三个小字典,修改键值对直接赋值即可,修改列表内嵌套的字典,直接用下表+key即可,增加列表元素用append()函数,记得增加字典。

2.3代码展示 

  1. import json
  2. def Func():
  3. data = open("step2/2017.txt","r",encoding = "utf-8")
  4. obj = json.load(data)
  5. data.close()
  6. #********** Begin *********#
  7. obj["count"]=4
  8. #修改键值对,把学生数从3改为4
  9. obj["infos"][0]["age"]=16
  10. obj["infos"][1]["age"]=17
  11. obj["infos"][2]["age"]=16
  12. obj["infos"].append({"name":"叶良辰","age":17,"height":1.87,"sex":"男性"})
  13. #********** End **********#
  14. output = open("step2/2018.txt","w",encoding = "utf-8")
  15. json.dump(obj,output) #输出到文件
  16. output.close()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/781267
推荐阅读
相关标签
  

闽ICP备14008679号