Python解析json文件

本文详细介绍Python中JSON数据的处理方法,包括如何使用Python内置库json进行数据编码与解码,将字典转换为JSON字符串,从文件读取JSON数据并转换为Python字典,以及JSON与Python数据类型的相互转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日常编程工作中,JSON是接口传递数据的默认格式,对json文件的解析是很常见的步骤。Python的第三方库JSON让解析json文件变得很简单。
在编写接口传递数据时,往往需要使用JSON对数据进行封装。python和json数据类型的转换,看作为编码与解码。
JSON 函数
使用 JSON 函数需要导入 json 库:import json。

函数描述
json.dumps将 Python 对象编码成 JSON 字符串-转换为string (易传输)
json.dump将dict类型转换为json字符串格式,写入到文件 (易存储)
json.loads针对内存对象将已编码的 JSON 字符串解码为 Python
json.load针对文件句柄,将json格式的字符转换为dict,从文件中读取 (将string转换为dict)

json格式与python格式的对应

PythonJSON
dictobject
list, tuplearray
strstring
int, floatnumber
Truetrue
Falsefalse
Nonenull

1,读取json文件
json文件内容本质上字符串,当我们拿到json文件后只有转换成字典才方便使用,方便获取需要的字段;

import json
# json示例
{
  "version": "1.0",
  "modelinfo": [
    {
      "versionid": "V1",
      "netypes": ["ITBBU"],
      "subtypes": ["NR"]
    }
  ]
 }
{'version': '1.0',
 'modelinfo': [{'versionid': 'V1', 'netypes': ['ITBBU'], 'subtypes': ['NR']}]}
jsonpath = "E:/temp_files/test.json"
with open(jsonpath, 'r', encoding='utf-8') as f:
    jsondata = json.load(f)
    print('jsondata 数据类型:',type(jsondata))

输出:
jsondata 数据类型: <class ‘dict’>

# json文件转换成字典后,我们就可以向字典一样取数据了
version = jsondata["version"]
print('version:',version)
netypes = jsondata["modelinfo"][0]["netypes"]
print('netypes: ',netypes)

输出:
version: 1.0
netypes: [‘ITBBU’]

2 将字典转换成json 文件

# 将字典写入到json文件中
newdict = {"test": [1,2,"English","中文"],"date": "2020/8/20 12:12:10"}
with open(jsonpath, 'a', encoding='utf-8') as f:
    json.dump(newdict, f, ensure_ascii=False)  #  如果ensure_ascii 为false,则返回值可以包含非ascii值

3 将json字符串转换成字典

json_str = '{"test": [1, 2, "English", "中文"], "date": "2020/8/20 12:12:10"}'
print('这是转换后的数据:',json.loads(json_str))   # 注意是loads,有s
print('这是转换后的数据类型:',type(json.loads(json_str)))
这是转换后的数据: {'test': [1, 2, 'English', '中文'], 'date': '2020/8/20 12:12:10'}
这是转换后的数据类型: <class 'dict'>

4 将字典转换成json字符串

dicts = {
    "key1": "asdf",
    "key2": "jkl"
}
print('这是将字典转换之后的数据:',json.dumps(dicts,ensure_ascii=False))
print('这是将字典转换之后的数据类型:',type(json.dumps(dicts,ensure_ascii=False)))
这是将字典转换之后的数据: {"key1": "asdf", "key2": "jkl"}
这是将字典转换之后的数据类型: <class 'str'>

5 虽然字典是最常见的类型,但是其他数据类型也是可以的

    import json
    print("start to working....")
    py_ob = [1, 2.0, "string", True]
    jsonpath = "E:/temp_files/test2.json"
    with open(jsonpath,'w',encoding='utf-8') as f:
        json.dump(py_ob,f,ensure_ascii=False)

    with open(jsonpath,'r',encoding='utf-8') as f2:
        py = json.load(f2)
    print(type(py))   # <class 'list'>
    print(py)   # [1, 2.0, 'string', True]

    json_ob = json.dumps(py_ob)
    print(type(json_ob))   # <class 'str'>
    print(json_ob)    # [1, 2.0, "string", true]

    py_ob2 = json.loads(json_ob,encoding='utf-8')
    print(type(py_ob2))   # <class 'list'>
    print(py_ob2)   # [1, 2.0, 'string', True]

输出:
start to working…
<class ‘list’>
[1, 2.0, ‘string’, True]
<class ‘str’>
[1, 2.0, “string”, true]
<class ‘list’>
[1, 2.0, ‘string’, True]

总结:不管是dump还是load,带s的都是和字符串相关的,不带s的都是和文件相关的。

参考:https://www.cnblogs.com/jfl-xx/p/7992985.html
https://www.runoob.com/python/python-json.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值