Python处理Json数据

Python处理Json数据

在Json中,遵循“key-value”的这样一种方式。

比如最简单的这种:{"name" : "zhuxiao5"}
跟python 里的字典似的,也是一个Json格式的数据。

复杂一点的比如这种(后文会多次使用到这个例子):

{   
 "animals":
               {
        "dog": [            
                    {               
                        "name": "Rufus",  
                        "age":15            
                    },           
                   { 
                       "name": "Marty", 
                       "age": null           
                   }        
                ]    
          }
}

以上图为例,再多说几句Json格式的特点

  • 对象通过键值对表现;
  • 键通过双引号包裹,后面跟冒号,然后跟该键的值;
  • 值可以是字符串、数字、数组等数据类型;
  • 对象与对象之间用逗号隔开;
  • {}用来表达对象;
  • []用来表达数组;

Python中的Json模块

Python中也自带了Json模块,其中json.dumps()json.loads()较为常用。

json.dumps()是将python 对象转化为json

json.loads() 是将json 转化为 python 对象

#json.dumps(),json.loads()
import jsondict_data = {"a": 1, "b": 2}
# 将dict格式数据转换成json格式字符串dump_data = json.dumps(dict_data)
# 将json格式字符串转换成对应的python值load_data = json.loads(dump_data)
# 打印转换结果
print(type(dict_data),dict_data)
print(type(dump_data),dump_data)
print(type(load_data),load_data)

运行结果:

 {'a': 1, 'b': 2}
   {"a": 1, "b": 2}
 {'a': 1, 'b': 2}

在例子中一开始的变量 dict_data 是一个字典,json.dumps()后,将dict格式数据转换成json格式字符串。这时候虽然都是{'a': 1, 'b': 2},但是格式却前后不一样。随后又通过 json.loads(),重新将json格式字符串转换成字典。

获取json里的数据

获取其中所有dogname

{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

我们可以这样做:

load_data = json.loads(dump_data)
data = load_data.get("animals").get("dog")
result1 = []
for i in data:
    result1.append(i.get("name"))
print(result1)

运行结果:

['Rufus', 'Marty']
用JsonPath来处理

JsonPath 是一种信息抽取类库,是从Json文档中抽取指定信息的工具。
JsonPath 对于 Json 来说,相当于 XPATH 对于 XML。
Json结构清晰,可读性高,复杂度低,非常容易匹配,下表是JsonPath的用法。

JsonPath
{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

我们可以这样做:

load_data = json.loads(dump_data)
jobs=load_data['animals']['dog']
result2 = []
for i in data:
# 从根节点开始,匹配`name`节点
    result2.append(jsonpath.jsonpath(i,'$..name')[0])
print(result2)

其中$..name 代表从根节点开始,匹配name节点
运行结果:

['Rufus', 'Marty']

利用 JsonPath 同样可以获得我们想要的结果。

你可能感兴趣的:(Python处理Json数据)