我有一个已过滤的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并将'更改为'。任何人都可以提供一些指示从哪里开始?
答案 0 :(得分:1)
假设您使用的是Python 2.X。
json.loads
将str
或unicode
作为其参数。您提供的字符串不是有效的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
。
对我来说,这是让它无误地工作的唯一方法。