【问题标题】:How to pretty print a json.loads method in Python如何在 Python 中漂亮地打印 json.loads 方法
【发布时间】:2021-01-08 03:08:16
【问题描述】:

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

【问题讨论】:

  • 你试过使用 pprint 吗? docs.python.org/3/library/pprint.html
  • 只是添加到@sagar1025 所做的评论。您可以使用 pprint 模块中的 pprint 方法来格式化您的 JSON 输出。所以导入的时候试试:from pprint import pprint。这样您就可以引用此方法而不是您的 print() 语句,如下所示:pprint(#json)

标签: python json pretty-print


【解决方案1】:

我认为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, 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}

【讨论】:

  • 感谢您花时间回答我的问题!但是,您的回答有问题。当使用 pprint() 进行漂亮的打印时,我希望输出为 python 格式。漂亮打印时 boyPYTHON 的输出仍然是 JSON 格式。
  • 现在我很困惑......你到底在问什么?您最初的问题从未提及pprint()
  • 你是对的,我从来没有使用过漂亮的打印,但是,虽然 print(json.dumps(boyPYTHON, indent=2)) 很好地格式化了代码,但它仍然是 JSON 格式。例如,“昵称”= null(而不是 None); “友好”= false(而不是 False)。对不起,如果我没有澄清自己。
  • 啊我现在明白了。刚刚更新了我的答案的最后几行以使用pprint() 显示FalseNone——这是你所希望的吗?
猜你喜欢
  • 2017-12-19
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多