将JSONlike对象转换为JSON

2024-10-01 02:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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并将“改为”。有人能提供一些从哪里开始的建议吗?你知道吗


Tags: 文件jsonevalast结构loadsval1literal
3条回答

假设您使用的是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字符串中扩展出来的字典。你知道吗

看起来这很有效(在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'}}

如您所见,我已经将两种模式都替换为“to”chars和(因此)u“to”模式。你知道吗

希望这有帮助。你知道吗

这是我的观点(python2.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。你知道吗

对我来说,这是唯一的方法,使它工作没有错误。你知道吗

相关问题 更多 >