如何在python中转储不带引号的json
下面是我如何转储文件的如何在python中转储不带引号的json,python,json,python-2.7,Python,Json,Python 2.7,下面是我如何转储文件的 with open('es_hosts.json', 'w') as fp: json.dump(','.join(host_list.keys()), fp) 结果是 "a,b,c" 我想: a,b,c 感谢使用python内置的字符串替换函数 with open('es_hosts.json', 'w') as fp: json.dump(','.join(host_list.keys()).replace('\"',''), fp) 在执行字符
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()), fp)
结果是
"a,b,c"
我想:
a,b,c
感谢使用python内置的字符串替换函数
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()).replace('\"',''), fp)
在执行字符串替换之前,您可能希望
去掉引号:
print '"a,b,c"'.strip('"')
输出:
a,b,c
这更接近你想要达到的目标。即使只删除第一个和最后一个字符也有效:“a,b,c”[1:-1]
但是,您研究过了吗?嗯,这不是有效的json,因此json
模块不会帮助您编写数据。但你可以这样做:
import json
with open('es_hosts.json', 'w') as fp:
data = ['a', 'b', 'c']
fp.write(json.dumps(','.join(data)).replace('"', ''))
这是因为您要求的是json
,但由于这不是json,这就足够了:
with open('es_hosts.json', 'w') as fp:
data = ['a', 'b', 'c']
fp.write(','.join(data))
要仅删除键中的引号,这在以后解析时可能很重要(可能是使用某种宽容的解析器,或者出于奇怪的原因,可能只是将其直接导入节点),可以尝试以下正则表达式
re.sub(r'(?<!: )"(\S*?)"', '\\1', json_string)
将引发一个ValueError
,但打印您想要的内容。只需使用for循环将列表分配给字符串即可
导入json
将open('json_file')作为f:
data=json.load(f.read())
对于数据['key\u name']中的值\u wo\u括号:
打印(值和括号)
注意json.load
和json.load
之间有区别,是什么让您认为所需的输出是有效的json?你为什么需要没有引号的呢?我知道…但这只是一个角落里的一部分,我不需要引号output@MartijnPietersOP没有建议将不带引号的字符串直接用作JSON。我最近也遇到过类似的情况,在这个过程中后来添加了双引号,所以我需要未加引号但JSON转义的字符串。@AndreasMaier:那是完全不同的情况。@MartijnPieters再次思考这个问题,你的问题现在似乎更合适了。编写扩展名为“.json”的文件似乎表明了这一点。此解决方案还删除了字符串中的双引号。此解决方案比建议替换所有双引号的解决方案要好,但当(无引号)字符串的最后一个字符是(转义的)双引号时,它仍然删除了太多,如“我的名字是”“Andy”“”
。您想要的是只删除前面的双引号和后面的双引号。我应该补充一点,我的评论适用于答案中建议的第一个解决方案(使用strip()
)。第二种解决方案(使用切片)适用于所有情况(并且应该有自己的答案,这样才能投票支持)。仍然投票支持这个答案。
import re
regex = r'(?<!: )"(\S*?)"'
o = {"noquotes" : 127, "put quotes here" : "and here", "but_not" : "there"}
s = json.dumps(o)
s2 = json.dumps(o, indent=3)
strip_s = re.sub(regex,'\\1',s)
strip_s2 = re.sub(regex,'\\1',s2)
print(strip_s)
print(strip_s2)
assert(json.loads(strip_s) == json.loads(s) == json.loads(strip_s2) == json.loads(s2) == object)