首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Dump to JSON添加了额外的双引号和转义引号

Dump to JSON添加了额外的双引号和转义引号
EN

Stack Overflow用户
提问于 2014-08-11 19:31:25
回答 4查看 123.5K关注 0票数 109

我使用Python工具检索Twitter数据,并将这些数据以JSON格式转储到我的磁盘上。我注意到一个用双引号括起来的tweet的整个数据字符串的意外转义。此外,实际JSON格式的所有双引号都使用反斜杠进行转义。

它们看起来像这样:

"{\"created_at\":\"Fri Aug 08 11:04:40 +0000 2014\",\"id\":497699913925292032,

我该如何避免这种情况?它应该是:

{"created_at":"Fri Aug 08 11:04:40 +0000 2014“.....

我的文件输出代码如下所示:

代码语言:javascript
复制
with io.open('data'+self.timestamp+'.txt', 'a', encoding='utf-8') as f:
            f.write(unicode(json.dumps(data, ensure_ascii=False)))
            f.write(unicode('\n'))

在以后的处理步骤中读入JSON文件时,意外的转义会导致问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-11 19:37:28

您正在对JSON字符串进行双重编码。data已经一个JSON字符串,不需要重新编码

代码语言:javascript
复制
>>> import json
>>> not_encoded = {"created_at":"Fri Aug 08 11:04:40 +0000 2014"}
>>> encoded_data = json.dumps(not_encoded)
>>> print encoded_data
{"created_at": "Fri Aug 08 11:04:40 +0000 2014"}
>>> double_encode = json.dumps(encoded_data)
>>> print double_encode
"{\"created_at\": \"Fri Aug 08 11:04:40 +0000 2014\"}"

只需将这些内容直接写入您的文件:

代码语言:javascript
复制
with open('data{}.txt'.format(self.timestamp), 'a') as f:
    f.write(data + '\n')
票数 164
EN

Stack Overflow用户

发布于 2019-04-26 12:02:40

发生这种不想要的转义的另一种情况是,如果您尝试对json.dumps()的预处理输出使用json.dump()。例如

代码语言:javascript
复制
import json, sys
json.dump({"foo": json.dumps([{"bar": 1}, {"baz": 2}])},sys.stdout)

将导致

代码语言:javascript
复制
{"foo": "[{\"bar\": 1}, {\"baz\": 2}]"}

为了避免这种情况,您需要传递字典而不是json.dumps()的输出,例如

代码语言:javascript
复制
json.dump({"foo": [{"bar": 1}, {"baz": 2}]},sys.stdout)

它输出所需的

代码语言:javascript
复制
{"foo": [{"bar": 1}, {"baz": 2}]}

(您会问,为什么要用json.dumps()对内部列表进行预处理?嗯,我有另一个函数,它从其他东西中创建内部列表,我认为从该函数返回一个json对象是有意义的……错误。)

票数 9
EN

Stack Overflow用户

发布于 2021-03-08 18:36:27

对于其他有类似问题的人,我用它将JSON格式的数据转储到文件中,其中的数据来自API调用。下面只是一个指示性的例子,请根据您的需求进行更新

代码语言:javascript
复制
import json

# below is an example, this came for me from an API call
json_string = '{"address":{"city":"NY", "country":"USA"}}'

# dump the JSON data into file ( dont use json.dump as explained in other answers )
with open('direct_json.json','w') as direct_json:    
    direct_json.write(json_string)
    direct_json.write("\n")

# load as dict
json_dict = json.loads(json_string)

# pretty print
print(json.dumps(json_dict, indent = 1)) 

# write pretty JSON to file
with open('formatted.json','w') as formatted_file: 
    json.dump(json_dict, formatted_file, indent=4)  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25242262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档