繁体   English   中英

将类似JSON的对象转换为JSON

[英]Converting JSON-like object to 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不起作用。 我猜我有2个问题:删除unicode并将'更改为“。有人可以提供有关从何处开始的指针吗?

假设您正在使用Python2.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字符串json_dict的字典。

看起来像这样(在Python3中):

$ python3.4
Python 3.4.0 (default, Jun 19 2015, 14:20:21) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> j = """{u'spec1': {u'property1': u'12345', u'property2': 1234}, u'spec2': {u'property3': u'98754', u'property4': u'val1'}}"""
>>> json.loads(j.replace("'","\"").replace('u"','"'))
{'spec1': {'property1': '12345', 'property2': 1234}, 'spec2': {'property4': 'val1', 'property3': '98754'}}

如您所见,我已经将'替换为“ chars,并将(因此来了)u”替换为“模式。

希望这可以帮助。

一种。

这是我的看法(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

对我而言,这是使其无错误运行的唯一方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM