我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中json操作之json.loads、json.load、json.jumps及json.jump用法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中json操作之json.loads、json.load、json.jumps及json.jump用法

前言

经常在Python中对JSON格式的文件进行操作,今天对这些操作做一个总结

首先,需要导入json库import json

0.python类型与json类型互换表

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

什么是json字符串?

相较于JSON对象,JSON字符串(可以理解为一个普通的字符串但拥有特殊的格式 这种格式可以用来转换回JSON对象)可以更加方便的在函数之间传递

JSON对象中只能使用双引号"" 而python对象字典中可以使用单引号''

1.将json字符串转化(反序列化)

(1)json.loads

将JSON字符串转化为 Python 字段的数据类型。

loads:针对内存对象,将string转换为dict (将string转换为dict)

def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``s`` (a ``str`` instance containing a JSON
    document) to a Python object."""

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型

jsonData='{"\u6d4b\u8bd5": 12345, "\u5185\u5bb9": ["\u6211\u4e5f\u4e0d\u77e5\u9053\u6211\u8981\u5199\u4ec0\u4e48", "123"]}'

print(jsonData)
print(type(jsonData)) # <class 'str'> 理解为json字符串

py_type_info=json.loads(jsonData)

print(py_type_info)
print(type(py_type_info)) # <class 'dict'>

# 输出:
#{"测试": 12345, "内容": ["我也不知道我要写什么", "123"]}
# <class 'str'>
# {'测试': 12345, '内容': ['我也不知道我要写什么', '123']}
# <class 'dict'>

可以从上面输出中看到 JSON 的双引号 与python dict的单引号

(2)json.load

json.load用于读取.json格式的文件,将JSON文件 转化成Python字段的数据类型

load:针对文件句柄,将json格式的字符转换为dict,从文件中读取 (将string转换为dict)

def load(fp, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
    a JSON document) to a Python object."""
with open('abc.json','r',encoding='utf-8')as f:
    py_type_info = json.load(f)
    print(py_type_info)
       with open(os.path.join("/home/output/compare", "cmp{}.json".format(i)), "r", encoding='utf-8') as f:
            cmpInfo=json.load(f)

延伸:如果.json文件中有注释怎么办

参考资料:Pythonh中用json.load() json.loads()加载json数据的方法

提醒:根据JSON规范(http://www.json.org, RFC 4627, RFC 7159),不支持注释

但如果真的不幸遇到json文件中有 // 类似的注释如何解决?

    def load_json(path):   
    import json
    lines = []     #  第一步:定义一个列表, 打开文件
    with open(path) as f:  
        for row in f.readlines(): # 第二步:读取文件内容 
            if row.strip().startswith("//"):   # 第三步:对每一行进行过滤 
                continue
            lines.append(row)                   # 第四步:将过滤后的行添加到列表中.
    return json.loads("\n".join(lines))       #将列表中的每个字符串用某一个符号拼接为一整个字符串,用json.loads()函数加载,这样就大功告成啦!!

2.将python对象转化(序列化)

(1)json.dumps

json.dumps 用于将 Python 对象 编码成 JSON 字符串

注意:这个函数产生的是字符串

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
  • obj:转化成json的对象。
  • skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key 。
  • ensure_ascii=True:默认输出ASCLL码,如果把这个该成False,就可以输出中文。
  • check_circular:如果check_circular为false,则跳过对容器类型的循环引用检查,循环引用将导致溢出错误(或更糟的情况)。
  • allow_nan:如果allow_nan为假,则ValueError将序列化超出范围的浮点值(nan、inf、-inf),严格遵守JSON规范,而不是使用JavaScript等价值(nan、Infinity、-Infinity)。
  • default:default(obj)是一个函数,它应该返回一个可序列化的obj版本或引发类型错误。默认值只会引发类型错误。
  • sort_keys =True:是告诉编码器按照字典排序(a到z)输出。如果是字典类型的python对象,就把关键字按照字典排序。
  • indent:参数根据数据格式缩进显示,读起来更加清晰。
  • separators:是分隔符的意思,参数意思分别为不同dict项之间的分隔符和dict项内key和value之间的分隔符,把:和,后面的空格都除去了。
	j1={'测试':12345,'内容':['我也不知道我要写什么','123']}
    j1_str=json.dumps(j1)
    print(j1)
	# 输出:{'测试': 12345, '内容': ['我也不知道我要写什么', '123']}

(2)json.dump

将Python对象编码成JSON文件

j1={'测试':12345,'内容':['我也不知道我要写什么','123']}
with open('abc.json','w') as f:
    json.dump(j1,f)

abc.json中写入了Python对象j1编码出的json格式信息:

{"\u6d4b\u8bd5": 12345, "\u5185\u5bb9": ["\u6211\u4e5f\u4e0d\u77e5\u9053\u6211\u8981\u5199\u4ec0\u4e48", "123"]}

总结

到此这篇关于python中json操作之json.loads、json.load、json.jumps及json.jump用法总结的文章就介绍到这了,更多相关python json操作用法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中json操作之json.loads、json.load、json.jumps及json.jump用法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中聚类技术的应用:数据分析方法及操作指南

数据聚类是一种常用的数据分析技术,可以帮助我们对大量的数据进行分组和分析,从而获得更加深入的洞察和认识。在Python中,我们可以使用各种聚类算法来进行数据聚类,例如K-Means、层次聚类、DBSCAN等。本文将介绍如何使用Python中
Python中聚类技术的应用:数据分析方法及操作指南
2024-01-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录