2014-11-20 87 views
-2

我有一个文件,其中包含由其他程序生成的以下内容。请注意,每个人在最后都有一个新的字符。将以下数据转换为python中的JSON格式

{'a':1,'b':534} 
{'a':4,'b':882} 
{'a':2,'b':964} 
. 
. 
so on... 

如何将其转换为有效的JSON格式?

上面应印像这样

{ 
    "Sale": [ 
     { 
      "a": 1, 
      "b": 534 
     }, 
     { 
      "a": 4, 
      "b": 882 
     }, 
     { 
      "a": 2, 
      "b": 964 
     } 
    ] 
} 

我能做到这一点的JQuery的,但我需要为我在蟒蛇并不好做这在Python,但我需要使其可以运行通过bash脚本因此需要将其转换为python脚本。

我要分享jquery解决方案,以防万一需要引用。

result = replaceAll(result,"'","\""); 
result = replaceAll(result,"}, {",","); 
result = replaceAll(result,"}{","},{"); 
result = replaceAll(result,"}\n{","},{"); 
result = "{\"Sale\":["+result+"]}"; 
//alert(result); 

的replaceAll功能

function replaceAll(str, find, replace) { 
var i = str.indexOf(find); 
if (i > -1){ 
    str = str.replace(find, replace); 
    i = i + replace.length; 
    var st2 = str.substring(i); 
    if(st2.indexOf(find) > -1){ 
    str = str.substring(0,i) + replaceAll(st2, find, replace); 
    }  
} 
return str; 
} 

上述作品,但我需要一个python替代方式。

+3

有没有使用什么特别的原因['json'(https://docs.python.org/2/library/json.html)?您可以使用['ast.literal_eval'](https://docs.python.org/2/library/ast.html#ast.literal_eval)来解析文件中的对象。 – jonrsharpe 2014-11-20 17:26:20

+0

原始输出(将被转换为json)是用C语言编写的其他程序。有没有办法?否则,我只需要深入研究原始程序的源代码并修改它。我把这作为最后的手段。 – anshp 2014-11-20 17:30:03

+0

是的,当然有一种方法,但如果原始程序输出有效的JSON会更容易。 – jonrsharpe 2014-11-20 17:35:30

回答

2
from ast import literal_eval 
with open('data.txt') as f: 
    sale = [literal_eval(line) for line in f] 
    data = {'Sale': sale} 
    print(data) 

输出

{'Sale': [{'a': 1, 'b': 534}, {'a': 4, 'b': 882}, {'a': 2, 'b': 964}]} 

从那里,你可以使用json library写这个JSON格式提交。

import json 
json.dumps(data, indent=4) 
+0

谢谢。这有帮助。 – anshp 2014-11-20 17:40:21

0
from ast import literal_eval 
import json 
sale = [] 
with open(filepath) as f: 
    lines = f.read() 
    for line in lines: 
     sale.append(literal_eval(line)) 
json.dumps({"sale":sale}, indent=4)