如何在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)