Json文件的特点
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。Json格式有几个特点:
- 对象通过键值对表现;
- 键通过双引号包裹,后面跟冒号:,然后跟该键的值;
- 值可以是字符串、数字、数组等数据类型;
- 对象与对象之间用逗号隔开;
- {}用来表达对象;
- []用来表达数组;
以一个实际例子看看:
import json
data={
"status":"success",
"data":{
"Type":"json",
"result":[
{
"fruit1":"apple",
"price":25
},
{
"fruit2":"banana",
"price":18
}
]
}
}
Python的Json函数
Python内置了 Json函数,可以用来解析Json文件,获取字段和值。只要导入 json 库即可:import json。
json有json.dumps和json.loads两个函数,区别在于:
函数 | 描述 |
json.dumps() | 将 Python 对象编码成 JSON 字符串 |
json.loads() | 将已编码的 JSON 字符串解码为 Python 对象, |
以一个实际例子看看:
print (data)
# Python 字典类型转换为 JSON 对象
data1 = json.dumps(data)
print(data1)
# 将 JSON 对象转换为 Python 字典
data2 = json.loads(data1)
print(data2)
运行的结果是这样:
{'status': 'success', 'data': {'Type': 'json', 'result': [{'fruit1': 'apple', 'price': 25}, {'fruit2': 'banana', 'price': 18}]}}
{"status": "success", "data": {"Type": "json", "result": [{"fruit1": "apple", "price": 25}, {"fruit2": "banana", "price": 18}]}}
{'status': 'success', 'data': {'Type': 'json', 'result': [{'fruit1': 'apple', 'price': 25}, {'fruit2': 'banana', 'price': 18}]}}
可以看到json.dump()和Json.loads的区别。
Json的字段解析
获取Json的value字段值
只要先弄懂json文件的结构,就可以根据路径来获取所需要的Value值,包含在列表中的Value可以通过索引获取
#打印Json返回data中的status值
print(data['status'])
#打印Json返回的result内容
print(data['data']['result'])
#打印Json返回的result列表索引0的内容,即列表的第一个元素
print(data['data']['result'][0])
#打印Json返回的result列表中字段fruit1和fruit2的值,根据索引0找到第一个元素fruit1,索引1找到第二个元素fruit2
print(data['data']['result'][0]['fruit1'])
print(data['data']['result'][1]['fruit2'])
输出的结果为:
success
[{'fruit1': 'apple', 'price': 25}, {'fruit2': 'banana', 'price': 18}]
{'fruit1': 'apple', 'price': 25}
apple
banana
获取Json的Key字段名
使用.keys()获取
data3=data['data']['result'][0]
print (data3)
#获取所有的key的列表
print(data3.keys())
#获取所有的key单个输出
for key in data3:
print (key)
输出的结果为:
{'fruit1': 'apple', 'price': 25}
dict_keys(['fruit1', 'price'])
fruit1
price
复杂Json解析
如果json的key值是可变的,但是又希望取value值呢,这种情况比较复杂,可以用循环,先将key获取出来,再用key作为变量去逐个获取value值。
假设下方示例,需要获取一共有多少种水果并且各个水果的价格。
import json
data={
"status":"success",
"data":{
"Type":"json",
"result1":[
{
"fruit":"apple",
"price": 25
},
{
"fruit":"banana",
"price": 18
}
],
"result2": [
{
"fruit": "apple",
"price": 24
},
{
"fruit": "banana",
"price": 17
}
]
}
}
则可以采用下列方式实现:
# 获取可变key result1 & result2的名称
for i in data['data']:
# 判断是包含了result 才认为是有效数据需要执行下一步
if 'result' in i:
print (data['data'][i][0]['fruit'],data['data'][i][0]['price'])
print (data['data'][i][1]['fruit'],data['data'][i][1]['price'])
运行结果为:
apple 25
banana 18
apple 24
banana 17