如何在 Python 中漂亮地打印 json.loads 方法
How to pretty print a json.loads method in Python
在使用 .loads()
将字典从 JSON 转换为 Python 时,我目前在 Python 中遇到漂亮的打印问题。从 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)
我认为对于 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)
这就是为什么 boyJSON
和 boyPYTHON
的打印效果会有很大不同。如果您希望他们打印 完全相同的 , 即“漂亮”,试试这个:
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
输出:
>>> 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}
在使用 .loads()
将字典从 JSON 转换为 Python 时,我目前在 Python 中遇到漂亮的打印问题。从 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)
我认为对于 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)
这就是为什么 boyJSON
和 boyPYTHON
的打印效果会有很大不同。如果您希望他们打印 完全相同的 , 即“漂亮”,试试这个:
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
输出:
>>> 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}