微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

当使用.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)

这就是boyJSONboyPYTHON的打印方式会非常不同的原因。如果要他们打印完全相同,即 “漂亮” ,请尝试以下操作:

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}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。