问题描述
当使用.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,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","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,'name': 'Jimmy','nickname': None}