📜  python json 1-2:使用json.dump/dumps将JSON写入文件/字符串

📅  最后修改于: 2020-09-06 09:14:05             🧑  作者: Mango

本小节,我们继续学习Json模块中jump/jumps的使用,主要以实例为主。对上一章节还有疑惑的伙伴们,请移步

https://www.imangodoc.com/4376.html

将Python基本类型转换为等效的JSON

我们继续学习将任何Python基本类型(例如字典,列表,集合,元组,字符串,数字)转换为JSON格式的数据。

import json
sampleDict = {
    "colorList": ["Red", "Green", "Blue"],
    "carTuple": ("BMW", "Audi", "range rover"),
    "sampleString": "imango.com",
    "sampleInteger": 457,
    "sampleFloat": 225.48,
    "booleantrue": True,
    "booleanfalse": False,
    "nonevalue": None
}
print("Converting Python primitive types into JSON")
resultJSON = json.dumps(sampleDict)
print("Done converting Python primitive types into JSON")
print(resultJSON)

输出如下:

Converting Python primitive types into JSON
Done converting Python primitive types into JSON
{“ colorList":[“ Red",“ Green",“ Blue"],“ carTuple":[“ BMW",“ Audi",“ range rover"] ,“ sampleString":“imango.com",“ sampleInteger":457,“ sampleFloat":225.48,“ booleantrue":true,“ booleanfalse":false,“ nonevalue":null}

Json.dumps()的使用告一段落。

使用json.dump()将JSON数据编码并写入文件

我们可以在以下情况下使用它。

  • 要将JSON响应写入文件中:在大多数情况下,执行GET请求时,您会收到JSON格式的响应,并且可以将JSON响应存储在文件中以备将来使用或供基础系统使用。
  • 例如,您在列表、字典或任何Python对象中都有数据,并且想要对数据进行编码并将其以JSON形式存储在文件中。
    import json
    # assume you have the following dictionary
    developer = {
        "name": "jane doe",
        "salary": 9000,
        "email": "imango@qq.com"
    }
    print("Started writing JSON data into a file")
    with open("./demo.json", "w") as write_file:
        json.dump(developer, write_file) # encode dict into JSON
    print("Done writing JSON data into .json file")

    成功执行后,将在本地生成Json文件,你可以在本地查看。×××××××看起来不是很优雅×××××××

使用dump方法更pretty的将JSON数据写入文件

如果用户想读取JSON文件,那么它必须可读性强且组织良好,因此无论谁消耗它,都将对数据结构有更好的了解。dump()方法提供以下参数来漂亮地打印JSON数据。

  • 缩进参数指定在一行的开头使用的空间。
  • json.dump方法的分隔符参数可以指定键和值之间的任何分隔符。
  • sort_keys通过按键JSON数据进行排序。
    import json
    developer = {
        "name": "Jakin",
        "salary": 9000,
        "skills": ["Raspberry pi", "Machine Learning", "Web Development"],
        "email": "imango@qq.com"
    }
    
    with open("./prettyDemo.json", "w") as write_file:
        json.dump(developer, write_file, indent=4, separators=(", ", ": "), sort_keys=True)
    print("Done writing pretty printed JSON data into a file")

    成功运行后,见证奇迹的时刻。

紧凑的编码可通过更改JSON键值分隔符来节省文件空间

果您不是在读取文件,而是只需要将JSON数据写入文件以供基础系统或应用程序使用,则可以通过执行紧凑编码将JSON数据写入文件。

我们可以通过更改JSON键值分隔符将JSON数据写入文件。您可以根据需要更改JSON表示形式。使用方法的分隔符参数,json.dump()可以指定键和值之间的任何分隔符。

为了限制JSON文件的大小,我们可以删除JSON键值之间的多余间距。我决定进行紧凑编码(separators=(',', ':'))。使用此分隔符,我们可以从JSON删除空格,以使JSON更加紧凑,并节省通过HTTP发送的字节。现在,让我们看一个例子。

import json

developer_dict = {
    "name": "imango",
    "salary": 9000,
    "skills": ["Raspberry pi", "Machine Learning", "Web Development"],
    "companies": ["Google", "Facebook", "IBM"],
    "email": "imango@qq.com"
}

print("Started writing compact JSON data into a file")
with open("developerDetailCompact.json", "w") as write_file:
    json.dump(developer_dict, write_file, separators=(',', ':'))
print("Done writing compact JSON data into json file")

使用skipkeys参数将JSON写入文件时跳过非基本类型

Python内置json模块只能处理具有直接JSON等效项的Python原语类型(例如,字典,列表,字符串,int,None等)。

如果Python字典包含自定义Python对象作为键之一,并且如果我们尝试将其转换为JSON格式,则将收到TypeError,即Object of type "Your Class" is not JSON serializable

如果JSON数据中不需要此自定义对象,则可以使用skipkeys=truejson.dump()方法参数跳过它
如果skipkeys=true为True,则将dict跳过不是基本类型的键(str,int,float,bool,None),而不是引发TypeError。

import json

class PersonalInfo:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def showInfo(self):
        print("Developer name is " + self.name, "Age is ", self.age)

dev = PersonalInfo("John", 36)
developer_Dict = {
    PersonalInfo: dev,
    "salary": 9000,
    "skills": ["Python", "Machine Learning", "Web Development"],
    "email": "jane.doe@pynative.com"
}
print("Writing JSON data into file by skipping non-basic types")
with open("developer.json", "w") as write_file:
    json.dump(developer_Dict, write_file, skipkeys=True)
print("Done")

在JSON输出中,该PersonalInfo对象dev被跳过。

处理JSON数据中的非ASCII字符,同时将其写入文件

json.dump()方法具有 ensure_ascii 参数。的 ensure_ascii 是默认的事实。确保输出的所有输入非ASCII字符都已转义。如果 ensure_ascii 为false,则这些字符将原样输出。如果要存储非ASCII字符,请按原样使用以下代码。

import json

unicode_string = u"\u00f8"
print("unicode String is ", unicode_string)

# set ensure_ascii=False
print("JSON character encoding by setting ensure_ascii=False")
print(json.dumps(unicode_string, ensure_ascii=False))

——->>>>> 感谢阅读和对我们的支持