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

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐