2024-10-01 02:39:30 发布
网友
我有一个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并将“改为”。有人能提供一些从哪里开始的建议吗?你知道吗
json.loads
ast.literal_eval
假设您使用的是python2.X
json.loads将str或unicode作为其参数。您提供的字符串不是有效的json字符串。所以我们应该做一些烹饪前的准备工作。你知道吗
str
unicode
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'}}
如您所见,我已经将两种模式都替换为“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。你知道吗
StringIO
literal_eval
对我来说,这是唯一的方法,使它工作没有错误。你知道吗
假设您使用的是python2.X
json.loads
将str
或unicode
作为其参数。您提供的字符串不是有效的json字符串。所以我们应该做一些烹饪前的准备工作。你知道吗那么
json_dict
将是一个从json字符串中扩展出来的字典。你知道吗看起来这很有效(在Python3中):
如您所见,我已经将两种模式都替换为“to”chars和(因此)u“to”模式。你知道吗
希望这有帮助。你知道吗
答
这是我的观点(python2.7)。你知道吗
不要看
StringIO
,它是用来模拟文件读取的。我的建议是逐行读取文件并逐行执行literal_eval
。你知道吗对我来说,这是唯一的方法,使它工作没有错误。你知道吗
相关问题 更多 >
编程相关推荐