将类似JSON的对象转换为JSON

时间:2015-07-29 08:03:21

标签: python json

我有一个已过滤的JSON文件并丢失了原始结构。该文件的每一行如下所示:

{u'spec1': {u'property1': u'12345', u'property2': 1234}, u'spec2': {u'property3': u'98754', u'property4': u'val1'}}

json.loads不起作用且ast.literal_eval不起作用。我想我有两个问题:删除unicode并将'更改为'。任何人都可以提供一些指示从哪里开始?

3 个答案:

答案 0 :(得分:1)

假设您使用的是Python 2.X。

json.loadsstrunicode作为其参数。您提供的字符串不是有效的json字符串。所以我们应该做一些预煮工作。

import re, json

json_str = """{u'spec1': {u'property1': u'12345', u'property2': 1234}, u'spec2': {u'property3': u'98754', u'property4': u'val1'}}"""
json_str = json_str.replace("\'", "\"")
json_str = re.sub(r"u\"", "\"", json_str)

json_dict = json.loads(json_str)

然后json_dict将是从你的json字符串中膨胀的字典。

答案 1 :(得分:1)

看起来这样(在Python3中):

<preference name="orientation" value="all" />

正如你所看到的,我已经取代了两个&#39;到&#34; chars,(因此来了)你&#34;到&#34;图案。

希望这有帮助。

一个。

答案 2 :(得分:1)

这是我的看法(Python 2.7)。

import StringIO
import ast
file = u"""{u'spec1': {u'property1': u'12345', u'property2': 1234}, u'spec2': {u'property3': u'98754', u'property4': u'val1'}}
{u'spec2': {u'property1': u'12345', u'property2': 1234}, u'spec3': {u'property3': u'98754', u'property4': u'val1'}}
{u'spec4': {u'property1': u'12345', u'property2': 1234}, u'spec2': {u'property5': u'98754', u'property4': u'val1'}}
{u'spec6': {u'property1': u'12345', u'property2': 1234}, u'spec2': {u'property7': u'98754', u'property4': u'val1'}}
"""
buffer = StringIO.StringIO(file)
lines = buffer.readlines()
dicts = []
for line in lines:
    dicts.append(ast.literal_eval(line))
print dicts

不要看StringIO,它会模仿文件阅读。我建议的是逐行阅读文件并逐行literal_eval

对我来说,这是让它无误地工作的唯一方法。