你真的会玩json解析吗

JSON解析

一个在线解析json的网站,挺好用的:JSON 在线解析

json简介

JSON: JavaScript Object Notation(JavaScript 对象标记法),是一种轻量级的数据交换格式,独立于编程语言的文本格式来存储和表示数据,现在大部分的数据传输基本使用的都是json格式,我们经常要从json里面拿到自己想要的数据也就是解析json,python里面有很多好用的包来帮助我们解析json,记得看到最后哦

语法规则

  • 数据在键/值对中
  • 数据由逗号 , 分隔
  • 使用斜杆来转义\字符
  • 大括号 {} 保存对象
  • 中括号 [] 保存数组,数组可以包含多个对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b8lxHYCw-1661871994246)(https://cdn.jsdelivr.net/gh/filess/img6@main/2022/08/30/1661870495730-106df44b-8170-43a4-88cf-a5de1c5de24f.png)]

我随便捏一个json来看看,大概长成这样子

json中一般分为两种结构

  • 对象:大括号{}包裹,以键值对的形式展现,每个ky对之间使用分割

    {k1 : v1, k2 : v2, ... kN : vN }
    
  • 数组:中括号[]包裹,每个值之间使用分割,值可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array),可以嵌套

    [
        { k1 : v1-1 , k2:v1-2 }, 
        { k1 : v2-1 , k2:v2-2 }, 
        ...
        { k1 : vN-1 , k2:vN-2 }, 
    ]
    

python读取json文件

好了看完了格式,那python是怎么读取json,又是怎么把python自由的格式转化成json的呢

#load():用于读取json文件对象,返回字典格式
import json

with open('tmp.json','r',encoding='utf8')as fp:
    json_data = json.load(fp)
    
print('这是文件中的json数据:',json_data)
print('这是读取到文件数据的数据类型:', type(json_data))

这是文件中的json数据: [{'大班': {'姓名': ['张三', '李四', '王二', '麻子'], '性别': ['男', '女'], '学科': {'理科': ['数学', '数学']}, '文科': ['政治', '历史']}}, {'小班': {'姓名': '刘五', '性别': '男', '学科': {'理科': ['数学', '数学']}}}, {'中班': '朱八'}, ['迷你班', '小小班', '巨无霸班']]

这是读取到文件数据的数据类型: <class 'list'>

#dump:用于将字典数据写入到json文件中
#值得一题的是:ensure_ascii=False时才保存中文字符,否则在json文件中保存的是ASCII字符,不是真正的中文
import json

dict1 = {'大班': {'姓名': ['张三', '李四', '王二', '麻子'], '性别': ['男', '女'], '学科': {'理科': ['数学', '数学']}, '文科': ['政治', '历史']}}
with open('tmp1.json','a',encoding='utf8')as fp:
    json.dump(dict1,fp,ensure_ascii=False)
#这样就把dict1这个字典保存到tmp1.json这个json文件里面了

python中的json格式转换

#dumps:用于将字典数据转换成json格式数据
import json
#实例化字典对象
dic1 = {"name":"张三","age":15,"gender":"男"}
#json.dumps(字典)
json_dict = json.dumps(dic1,ensure_ascii=False)
print('转换前类型为:',type(dic1))
print('转换后类型为:',type(json_dict))
print('转换后的数据为:',json_dict)

转换前类型为: <class 'dict'>
转换后类型为: <class 'str'>
转换后的数据为: {"大班": {"姓名": ["张三", "李四", "王二", "麻子"], "性别": ["男", "女"], "学科": {"理科": ["数学", "数学"]}, "文科": ["政治", "历史"]}}

#loads:将str类型的数据转换为dict类型
import json
#实例化字符串对象
str1 = """{"文科": ["政治", "历史"]}"""
#json.loads(json串)
json_str = json.loads(str1)
print('转换后类型为:',type(json_str))
#这里说一个更简单的方法
print('转换后类型为:',type(eval(str1)))

转换后类型为: <class 'dict'>
转换后类型为: <class 'dict'>

jsonpath

jsonpath对于大而长的json来说真的很好用,可以更加简洁舒服的解决解析json的问题,代码更易维护,JSONPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,很多编程语言都有这个包,包括Javascript、Python、PHP和Java等,我这里写一些常用的方法,感兴趣的可以去官网深入学习:JSONPATH官网,这是在线解析的网址,可以用来练习
JSONPATH在线解析网址

当然pycharm也自带这个功能

一些简单用法

官网的介绍

flatten_json

有一天你会发现能直接拉平一个json,是真的爽

pandas.json_normalize

pandas 里面也有很好用的json解析函数,可以直接把json解析成pandas的DataFrame对象

这是json_normalize的参数,可以看出功能pandas在json解析方面的功能也很强大几乎覆盖了所有解析JSON的场景

json解析之路漫漫长,希望大家可以做到一招治敌

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值