Python--JSON基础

目录

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 中的基础数据类型组成的对象。

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 基础数据类型如下表:

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

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

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

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

1.3从文件解析JSON数据

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 函数就可以正确的解析数据。 

1.4生成 JSON 数据

与解析的那两个函数相对应,json 库也提供了两个函数:dumpsdump ,来将由 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_asciiFalse 。否则非 ASCII 的字符将会被显示成 \uXXXX 的形式。

2.案例分析 

2.1案例介绍

有一个字符编码为 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,男性

 2.2原理分析

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

2.3代码展示 

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()

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饲养猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值