2013-04-08 85 views
1

我正在从JSON中提取一组值并将它们写入文件。从JSON提取Python的值

的JSON格式如下:

"interactions":  [ 
    { 
     "type": "free", 
     "input":    [ 
      [ 1, 4594, 119218, 0, [71, 46], [2295, 1492], [71, 46], [2295, 1492], 16017, 520790446, [71, 46, 71, 46], [71, 46, 71, 46] ], 
      [ 1, 4594, 119219, 0, [72, 46], [2323, 1492], [72, 46], [2323, 1492], 26016, 520790456, [72, 46, 72, 46], [72, 46, 72, 46] ], 
      [ 1, 4594, 119220, 0, [72, 45], [2323, 1464], [72, 45], [2323, 1464], 26016, 520790466, [72, 45, 72, 45], [72, 45, 72, 45] ], 
      [ 1, 4594, 119221, 0, [72, 45], [2323, 1464], [72, 45], [2323, 1464], 26016, 520790476, [72, 45, 72, 45], [72, 45, 72, 45] ], 
      [ 1, 4594, 119222, 0, [73, 45], [2350, 1464], [73, 45], [2350, 1464], 26016, 520790486, [73, 45, 73, 45], [73, 45, 73, 45] ], 
      [ 1, 4594, 119223, 0, [73, 45], [2350, 1464], [73, 45], [2350, 1464], 26016, 520790496, [73, 45, 73, 45], [73, 45, 73, 45] ], 
      [ 1, 4594, 119224, 0, [73, 45], [2350, 1464], [73, 45], [2350, 1464], 46000, 520790506, [73, 45, 73, 45], [73, 45, 73, 45] ] 
     ] 

我需要什么来提取,是[71,46]列中,然后其与520790446开始列,并将其写入到输出文件。

下面是我在一分钟得到了代码:

import json 

json_data = open("test_json.json") 

data = json.load(json_data) 

json_data.close() 

# Need some sort of nested loop here to iterate through each line of the block, and each block also. 
print data["interactions"][0]["input"][0][4], '\t', data["interactions"][0]["input"][0][9] 

有几个可变长度的这些块,我需要提取所有的值,直到文件的末尾。虽然我被困在循环结构中。

任何人都可以协助吗?

回答

2

你可以在像这样的数据得到:

[x[4] for x in data["interactions"][0]["input"]] 

[x[9] for x in data["interactions"][0]["input"]] 

或一气呵成,像

[[x[4], x[9]] for x in data["interactions"][0]["input"]] 

要回答的评论的第一部分:

[[x[4], x[9]] for x in interaction["input"] for interaction in data["interactions"]] 
+0

我该如何去在[[交互]]上面([0])之后迭代块?我相信这是遍历整个JSON文件的块。此外,可以输出到一个.csv文件或类似的每行后面的换行符?例如“[71,46] 520790446”在每一行上。 – Matthew 2013-04-08 14:06:42

+0

查看更新。最好问一个单独的问题输出数据或更好的仍然在这里搜索... – YXD 2013-04-08 14:13:47

+0

http://stackoverflow.com/questions/899103/python-write-a-list-to-a-file – YXD 2013-04-08 14:14:33

0
def gen_vals(data): 
    for i in xrange(len(data["interactions"])): 
     for j in data["interactions"][i]["input"]: 
      yield (j[4], j[9]) 

这是一个发电机,可以这样使用:

vals = [x for x in gen_vals(data)]