如何在 Python 中漂亮地打印 json.loads 方法

Leo*_*rdo 0 python json pretty-print

目前,当我使用.loads(). 当从 Python 转换为 JSON 时,我使用indent作为参数。但是,.loads()没有缩进参数。

我浏览了 python JSON 文档,它们只展示了如何使用.dumps().

这是我的代码来说明我的观点:

import json

class Kid:

    def __init__(self, name, age, nickname, isFriendly):
        self.name = name
        self.age = age
        self.nickname = nickname
        self.isFriendly = isFriendly

boy = Kid("Jimmy", 10, None, False)

def encode_kid(o):
    if isinstance(o, Kid):
        return {"name": o.name, "age": o.age,
                "nickname": o.nickname, "Is friendly": o.isFriendly}

boyJSON = json.dumps(boy, default=encode_kid, indent=2)
boyPYTHON = json.dumps(boyJSON, indent=2)

print(boyJSON)
print(boyPYTHON)
Run Code Online (Sandbox Code Playgroud)

yon*_*ona 5

json.dumps()我认为对于和方法到底发生了什么可能存在一些混乱json.loads()

# Serializing boy object to a str named boyJSON 
# -> resulting str will have JSON format 
boyJSON = json.dumps(boy, default=encode_kid, indent=2) 

# Serializing boyJSON str to another str boyPYTHON 
# -> resulting str will have JSON format, now with str literals
boyPYTHON = json.dumps(boyJSON, indent=2)
Run Code Online (Sandbox Code Playgroud)

这就是为什么boyJSONboyPYTHON打印会有很大不同。如果您希望它们打印完全相同的内容即“漂亮”,请尝试以下操作:

boyJSON = json.dumps(boy, default=encode_kid, indent=2)
boyPYTHON = json.loads(boyJSON) # Converts boyJSON str to a dict

print(boyJSON)
print(json.dumps(boyPYTHON, indent=2)) # Print boyPYTHON dict converted to a str with JSON format
Run Code Online (Sandbox Code Playgroud)

输出:

>>> print(boyJSON)
{
  "name": "Jimmy",
  "age": 10,
  "nickname": null,
  "Is friendly": false
}    

>>> print(json.dumps(boyPYTHON, indent=2))
{
  "name": "Jimmy",
  "age": 10,
  "nickname": null,
  "Is friendly": false
}

>>> print(boyPYTHON)
{'name': 'Jimmy', 'age': 10, 'nickname': None, 'Is friendly': False}

>>> from pprint import pprint
>>> pprint(boyPYTHON, width=1)
{'Is friendly': False,
 'age': 10,
 'name': 'Jimmy',
 'nickname': None}
Run Code Online (Sandbox Code Playgroud)