簡體   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