【问题标题】:Dumping a JSON using tab indents (not spaces)使用制表符缩进(不是空格)转储 JSON
【发布时间】:2017-12-02 20:18:18
【问题描述】:

我知道如何使用空格转储 JSON 字符串。这是我目前用来美化和转储 JSON 字符串的命令:

json.dump(data, open('dev_integrated.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))

我想知道是否有办法指定缩进 1 个制表符而不是 4 个空格。我无法在任何地方的文档中查找此内容。

谢谢。

【问题讨论】:

  • 我认为你不能这样做,但你可以在单独的调用中用制表符替换结果字符串中的 4 个空格
  • 您可以在这里使用simplejson,它在json 模块提供的基础之上还有一些不错的功能。另一种选择是复制the changescreate a custom class
  • @AshwiniChaudhary 谢谢。我会看看。看起来很有趣。

标签: python json python-2.7


【解决方案1】:

Python 2.7

有一个可以使用正则表达式实现的解决方法:

import re
dump = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '))
#Replaces spaces with tab
new_data = re.sub('\n +', lambda match: '\n' + '\t' * (len(match.group().strip('\n')) / 3), dump)
json.dump(new_data, open('dev_integrated.json', 'w')

Python 3.2+

来自Docs

如果 indent 是非负整数或字符串,则 JSON 数组元素和对象成员将使用该缩进级别进行漂亮打印。缩进级别 0、负数或 "" 只会插入换行符。无(默认)选择最紧凑的表示。使用正整数缩进每级缩进许多空格。如果 indent 是一个字符串(例如“\t”),则该字符串用于缩进每一级。

因此TAB缩进可以如下实现:

json.dump(jString, open('dev_integrated.json', 'w'), sort_keys=True, indent='\t', separators=(',', ': '))

【讨论】:

  • 问题标记为 Python 2.7。这是 Python 3.2+ 的特定功能。
  • 抱歉,发现 jString 这个名字在这里用词不当。编辑了你的帖子。 ;)
  • 所以我尝试了你的方法。必须将最后一行更改为:print >> open('dev_integrated.json', 'w'), new_data 否则它将转储保留字符。但这已经足够了。谢谢。
  • /3 与缩进的空格数不匹配,应该是 4。并且使用 // 代替 /。但是当 json.dumps 使用 indent=1 时,这种划分是不必要的。也可以在模式的开头使用 ^ 和 flags=re.MULTILINE 来避免搜索 \n
猜你喜欢
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
相关资源
最近更新 更多