【问题标题】:Python, json dump a list with no newlinesPython,json转储一个没有换行符的列表
【发布时间】:2017-04-30 15:47:53
【问题描述】:

我正在写一些最终会输出 json 文件的东西。

这是我目前要测试的内容

import json

my_list = [1, 2, 3]
my_dict = {"key": "value", "boolean": True}
my_json = {"object": my_dict, "array": my_list}

print(json.dumps(my_json, indent=4))

这将输出:

{
    "object": {
        "key": "value",
        "boolean": true
    },
    "array": [
        1,
        2,
        3
    ]
}

我不想要的是数组中每个值之后的换行符,纯粹是出于审美目的,即

"array": [1, 2, 3]

我该怎么做呢?

【问题讨论】:

  • 你试过删除indent=4吗?
  • 我猜你可以使用正则表达式来搜索和替换。但是你想如何处理包含嵌套在其他列表和字典中的列表和字典的更复杂的 JSON?要获得完全控制,您可以实现自己的继承自 json.JSONEncoder 的类。
  • 已关闭,但关闭消息中的链接指向一个过于复杂的答案。使用这个:print(json.dumps(my_json, indent=None, separators=(",",":"))),这导致紧凑的单行形式{"object":{"key":"value","boolean":true},"array":[1,2,3]}
  • 在我看来过于急切。这是一个非常简单的问题,而密切的提示指向一个非常复杂的答案。上面的 mgaert 提供了一个可以解决问题的单行代码。
  • 当数组长度为 100 或 1000 项时怎么办?你是如何渲染 json 字符串的?也许您可以使用不同的程序来渲染和探索 json,例如 firefox 或 chrome 浏览器,它们允许您展开和折叠书架?

标签: python json


【解决方案1】:

你的任务可以通过使用像jsbeautifier这样的库来完成

使用以下方法安装库:

pip install jsbeautifier

然后添加选项并调用jsbeautifier.beautify()函数。

完整代码:

import json
import jsbeautifier


my_list = [1, 2, 3]
my_dict = {"key": "value", "boolean": True}
my_json = {"object": my_dict, "array": my_list}

options = jsbeautifier.default_options()
options.indent_size = 2
print(jsbeautifier.beautify(json.dumps(my_json), options))

输出:

{
  "object": {
    "key": "value",
    "boolean": true
  },
  "array": [1, 2, 3]
}

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2021-12-17
    • 2020-09-08
    • 2012-07-07
    相关资源
    最近更新 更多