如何解析仅包含数字的JSON

时间:2019-05-17 14:36:09

标签: python json parsing

我仍在学习python,并尝试从看起来像JSON的数据中解析数据

{"297050": [[12, 137], [193, 776]], "297056": [[12, 203]]

但是我找不到像我一样的方式来阅读它

  

对于条目297050,这是列表[12,137],[193,776]   对于条目297056,这是列表[12,203]

我尝试过类似的事情

import json
from pprint import pprint

input_file = open ('file_JSON.txt')
json_array = json.load(input_file)
store_list = []


for obj in json_array :
    print obj,json_array[obj]

这给了我obj和每个数组

  

297050 [[12,137],[193,776]]

但是我实际上希望能够打印出现在其中的每个元素,例如json_array [obj] [0] ... etc

2 个答案:

答案 0 :(得分:1)

您可能应该使用嵌套的for循环。您应该打印什么内容取决于您希望输出的外观..但是您可以尝试以下方法:

#!/usr/bin/env python3
import json

data = '{"297050": [[12, 137], [193, 776]], "297056": [[12, 203]]}'

data = json.loads(data)

for k, v in data.items():
    print(k)
    for list_of_ints in v:
        for integer in list_of_ints:
            print(integer)

结果:

297050
12
137
193
776
297056
12
203

说明:

我们加载示例json,然后使用items遍历键值对。现在我们的键在k中,最外面的列表在v中。 v是一个列表,也是一个列表的列表..因此我们将其迭代为list_of_ints。最后,我们遍历这些列表中的每一个,并在运行时打印出最里面的整数。

如果您想要的输出是这样的:

对于条目297050,这是列表[12,137],[193,776]对于条目297056,这是列表[12,203]

然后我们可以稍微修改一下脚本..并摆脱很多循环。

#!/usr/bin/env python3
import json

output = "For entry {} this is the list {}"
data = '{"297050": [[12, 137], [193, 776]], "297056": [[12, 203]]}'

data = json.loads(data)

for k, v in data.items():
    lists_with_commas = ", ".join([str(x) for x in v])
    print(output.format(k, lists_with_commas), end=" ")

输出

For entry 297050 this is the list [12, 137], [193, 776] For entry 297056 this is the list [12, 203]

说明:

我们使用模板字符串。.它有{}到我们要放置的内容,以便稍后可以在其上运行.format

我们只需要键和最里面的列表。因此,我们只需要一个for循环。我们确保使用.join来获得示例中的逗号,并在其中进行列表理解,从而将所有列表转换为v中的字符串。

答案 1 :(得分:0)

您可以执行此操作。以线性方式使值不在列表中。

from itertools import chain

j = {"297050": [[12, 137], [193, 776]], "297056": [[12, 203]]}

for k in j:
     print(k)
     print('\t' + ', '.join(map(str, chain(*j[k]))))