使用制表符(而非空格)缩进转储JSON

19

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

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

我想知道是否有一种方法可以指定1个制表符的缩进,而不是4个空格。我无法在文档中找到任何相关的信息。

谢谢。


我认为你不能这样做,但是你可以在另一个调用中将结果字符串中的4个空格替换为制表符。 - Ivaylo Strandjev
1
你可以在这里使用 simplejson,它在 json 模块提供的功能上还有一些不错的特性。另一个选项是复制更改创建自定义类 - Ashwini Chaudhary
@AshwiniChaudhary 谢谢。我会看一下的。似乎很有趣。 - cs95
1个回答

32

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+

来自文档

如果缩进是一个非负整数或字符串,则JSON数组元素和对象成员将使用该缩进级别进行漂亮打印。 缩进级别为0,负数或“”仅插入换行符。 None(默认值)选择最紧凑的表示形式。 如果缩进是正整数,则每个级别都缩进那么多个空格。 如果缩进是字符串(例如“\t”),则使用该字符串缩进每个级别。

因此,可以按照以下方式实现TAB缩进:

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

该问题已标记为Python 2.7。这是Python 3.2+特有的功能。 - Ashwini Chaudhary
抱歉,我意识到这里的名称“jString”是一个错误的命名。已编辑您的帖子。 ;) - cs95
所以我尝试了你的方法。不过最后一行需要改成:print >> open('dev_integrated.json', 'w'), new_data,否则它会保留字符转储。但这已经足够好了。谢谢。 - cs95
/3与缩进空格数量不匹配,应为4。并使用//代替/。但是当json.dumps使用indent=1时,此除法是不必要的。另外,在模式开头使用^可以避免对\n的搜索,并且可以使用flags=re.MULTILINE。 - hubalazs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接