python json常用方法总结,loads与dumps区别,load与dump区别

python json常用方法总结


python版本:python3.7

JSON (JavaScript Object Notation),是一个受 JavaScript 的对象字面量语法启发的轻量级数据交换格式。

  • json是一种通用的数据类型,在各种语言上都可以使用
  • 常用于接口返回数据表示
  • json形式类似于dict,也是以key-value形式表示
  • 在python中,json其实是个字符串,字符串不能用key、value来取值,所以要先转换为字典才可以方便的取到json内的值

loads与dumps

  1. json.loads是将json对象解码成python对象,可以理解为json.loads将json字符串转化为字典(或者包含字典的python对象,如list)。
  2. json.dumps是对python对象编码成json对象,可以理解为json.dumps将字典(或者包含字典的python对象,如list)转化为json字符串。

举例:

import json

dict_demo = ['foo', {'bar': ('baz', None, 1.0, 2)}]
print("dict_demo type: ", type(dict_demo))
after_json_dumps = json.dumps(dict_demo, sort_keys=True, indent=4)
print("after_json_dumps type: ", type(after_json_dumps))
print(after_json_dumps)
after_json_load = json.loads(after_json_dumps, encoding='utf-8')
print("after_json_load type: ", type(after_json_load))
print(after_json_dumps)

输出结果如下:

dict_demo type:  <class 'list'>
after_json_dumps type:  <class 'str'>
[
    "foo",
    {
        "bar": [
            "baz",
            null,
            1.0,
            2
        ]
    }
]
after_json_load type:  <class 'list'>
[
    "foo",
    {
        "bar": [
            "baz",
            null,
            1.0,
            2
        ]
    }
]

备注:

  1. sort_keys是以json字符串的key进行排序
  2. indent是格式化json字符串,显示的空格数,主要是为了好看美观
  3. encoding是loads时的编码

load与dump

json.dump()和json.load()主要用来读写json文件的函数,这个文件一般会先被open了。

import json

dict_demo = ['foo', {'bar': ('baz', None, 1.0, 2)}]
after_json_dumps = json.dumps(dict_demo)
after_json_load = json.loads(after_json_dumps, encoding='utf-8')
file_write = open("json_demo.txt", 'w', encoding="utf-8")
# 将json字符串写入文件
json.dump(after_json_load, file_write)
file_write.close()
file_read = open("json_demo.txt", 'r', encoding="utf-8")
# 将打开的文件格式读取为json字符串
json_str = json.load(file_read)
print(json_str)
file_read.close()

PS

  1. json.loads()无法解析包含单引号的json字符串
    如下:
with open("json_demo.txt", 'r') as f:
    lines = f.readlines()
    for line in lines:
    	json_str = json.loads(line)

会报错:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 10 (char 9)
解决办法:
将json.loads变为eavl

import json
with open("json_demo.txt", 'r') as f:
    lines = f.readlines()
    for line in lines:
        json_str = eval(line)
        print(json_str)

参考:
JSON 编码和解码器

上一篇:Json.dupms() 和 Json.loads()


下一篇:Python学习之路(十六):基础知识之序列化模块