python - 如何将JSON文件解析为 python 列表

我试图将一个JSON文件解析为Python,但无法打印我试图从JSON中提取的任何特定数据。

如何将这些JSON数据放入单独的数组中,这样我就可以在 python 中使用它们?

这是 JSON file:


{


"Ask":


 {"0":[[9.13,30200],[9.14,106946],[9.15,53072],[9.16,58104],[9.17,45589]],


"1":[[9.14,106946],[9.15,53072],[9.16,58104],[9.17,45589],[9.18,37521]] },



"Bid":


 {"0":[[9.12,198807],[9.11,1110],[9.1,42110],[9.09,84381],[9.08,98178]],


"1":[[9.13,13500],[9.12,198807],[9.11,1110],[9.1,42110],[9.09,84381]]}


}



这是我的代码:


import json



with open("JSON Directory") as BOB:


 data=json.load(BOB)



for x in data["Bid"]:


 print(x["0"])




我得到一个错误:


TypeError: string indices must be integers



时间:

loop循环有一个小问题。


james@VIII:~/Desktop$ ls


f.txt


james@VIII:~/Desktop$ cat f.txt 


{


"Ask":


 {"0":[[9.13,30200],[9.14,106946],[9.15,53072],[9.16,58104],[9.17,45589]],


"1":[[9.14,106946],[9.15,53072],[9.16,58104],[9.17,45589],[9.18,37521]] },



"Bid":


 {"0":[[9.12,198807],[9.11,1110],[9.1,42110],[9.09,84381],[9.08,98178]],


"1":[[9.13,13500],[9.12,198807],[9.11,1110],[9.1,42110],[9.09,84381]]}


}


james@VIII:~/Desktop$ python3


Python 3.6.7 (default, Oct 22 2018, 11:32:17) 


[GCC 8.2.0] on linux


Type"help","copyright","credits" or"license" for more information.


>>> import json


>>> with open('f.txt') as f_in:


... data = json.load(f_in)


... 


>>> data


{'Ask': {'0': [[9.13, 30200], [9.14, 106946], [9.15, 53072], [9.16, 58104], [9.17, 45589]], '1': [[9.14, 106946], [9.15, 53072], [9.16, 58104], [9.17, 45589], [9.18, 37521]]}, 'Bid': {'0': [[9.12, 198807], [9.11, 1110], [9.1, 42110], [9.09, 84381], [9.08, 98178]], '1': [[9.13, 13500], [9.12, 198807], [9.11, 1110], [9.1, 42110], [9.09, 84381]]}}


>>> data['Ask']


{'0': [[9.13, 30200], [9.14, 106946], [9.15, 53072], [9.16, 58104], [9.17, 45589]], '1': [[9.14, 106946], [9.15, 53072], [9.16, 58104], [9.17, 45589], [9.18, 37521]]}


>>> 


>>> data['Bid']


{'0': [[9.12, 198807], [9.11, 1110], [9.1, 42110], [9.09, 84381], [9.08, 98178]], '1': [[9.13, 13500], [9.12, 198807], [9.11, 1110], [9.1, 42110], [9.09, 84381]]}


>>> for x in data['Bid']['0']:


... print(x)


... 


[9.12, 198807]


[9.11, 1110]


[9.1, 42110]


[9.09, 84381]


[9.08, 98178]



你的for循环需要稍微改变一下。

你不需要在读取文件时指定'R'。

你还可以获取如下值:


>>> for x in data['Bid']['0']:


... print(str(x[0]) + ': ' + str(x[1]))


... 


9.12: 198807


9.11: 1110


9.1: 42110


9.09: 84381


9.08: 98178



你的for是dict键的循环。


for x in data["Bid"]:


 print(type(x))


# <class 'str'>



尝试一下:


for x in data['Bid']['0']:


 print(x)



或者


for x in data['Bid'].values():


 print(x)



这个值 data["Bid"] 是一个 dict,通过遍历一个 dict,可以:


for x in data["Bid"]:



你实际上正在迭代dict的键,这些键是字符串,不能用x ["0 "]之类的非整数索引。

如果要在 data["Bid"] 键的0 键下迭代子列表,则应执行以下操作:


for x in data["Bid"]['0']:


 print(x)



...