I am retrieving Twitter data with a Python tool and dump these in JSON format to my disk. I noticed an unintended escaping of the entire data-string for a tweet being enclosed in double quotes. Furthermore, all double quotes of the actual JSON formatting are escaped with a backslash.

They look like this:

"{\'创建时间\:\"周五8月8日11:04:40+0000

How do I avoid that? It should be:

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

My file-out code looks like this:

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'))

The unintended escaping causes problems when reading in the JSON file in a later processing step.

推荐答案

You are double encoding your JSON strings. data is already a JSON string, and doesn't need to be encoded again:

>>> 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\"}"

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

with open('data{}.txt'.format(self.timestamp), 'a') as f:
    f.write(data + '\n')

Json相关问答推荐

Android:在哪里存储json文件以便应用程序和用户都可以访问?

PostgreSQL 12.17从JSON数组提取元素

使用PowerShell解析文件并获取特定行的值

在Snowflake中查询JSON时,属性名称是否支持绑定参数?

当并非所有子对象都有 Select 器字段时 Select

如何使用jq使用子值对象的键对json对象进行分组

如何使用jq按键 Select 并获取整个json输出来更改json中的多个值

jq - 仅在键值对存在的地方打印值

在 JOLT 中重新排列值

如何迭代、动态加载我的表单输入元素,然后在 React 中的表单提交上检索输入值?

如何将西里尔字母转换为 utf16

Laravel5 Json 获取文件内容

IE8 原生 JSON.parse 错误导致堆栈溢出

Json.Net:用于自定义命名的 JsonSerializer-Attribute

Rails 中奇怪的 JSON Javascript 问题

如何通过 NSJSONSerialization 在 JSON 中包含空值?

Json.NET 是否缓存类型的序列化信息?

杰克逊在通用列表中读取 json

Newtonsoft 对象 → 获取 JSON 字符串

在 iPhone 上解析 JSON 日期