Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的KeyError:0_Python_Json - Fatal编程技术网

Python中的KeyError:0

Python中的KeyError:0,python,json,Python,Json,我试图获取在这个JSON中返回的第一个对象的方向和站的值,但是我得到了以下错误 关键错误:0 这是我的密码: print(json.dumps(savedrequest, indent=4)) savedstation = savedrequest[0]['station'] saveddirection = savedrequest[0]['direction'] 这就是它在印刷品中返回的内容: { "-bas": { "email_address": "dd3@

我试图获取在这个JSON中返回的第一个对象的
方向
的值,但是我得到了以下错误

关键错误:0

这是我的密码:

print(json.dumps(savedrequest, indent=4))
savedstation = savedrequest[0]['station']
saveddirection = savedrequest[0]['direction']
这就是它在印刷品中返回的内容:

{
     "-bas": {
         "email_address": "dd3@gmail.com", 
         "direction": "Southbound", 
         "station": "place-har"
     }, 
     "-bus": {
         "email_address": "dd4@gmail.com", 
         "direction": "Southbound", 
         "station": "place-su"
     }
 }

我不知道返回的
-bas
-bus
将是什么,我需要选择数组中的第一个对象。

您的JSON被解码为一个“对象”(在python中称为
dict
),它不是数组。因此,它没有特定的“顺序”。您认为的“第一个”元素实际上可能不是这样存储的。不能保证每次都是同一个对象

但是,您可以尝试使用
json.loads的
object\u hook
参数将这些
dict
s转换为
orderedict
s。一个
OrderedDict
就像一个
dict
,但它记住了插入其中的顺序元素

import json
from collections import OrderedDict

savedrequest = json.loads(data, object_pairs_hook=OrderedDict)

# Then you can get the "first" value as `OrderedDict` remembers order
#firstKey = next(iter(savedrequest))
first = next(iter(savedrequest.values()))

savedstation = first['station']
saveddirection = first['direction']

(这个答案要感谢and)

您的JSON被解码成一个“对象”(在python中称为
dict
),它不是数组。因此,它没有特定的“顺序”。您认为的“第一个”元素实际上可能不是这样存储的。不能保证每次都是同一个对象

但是,您可以尝试使用
json.load
(和
json.load
)的
object\u pairs\u hook
参数将这些
dict
转换为
orderedict
s。一个
OrderedDict
就像一个
dict
,但它记住了插入其中的顺序元素

import json
from collections import OrderedDict

savedrequest = json.loads(data, object_pairs_hook=OrderedDict)

# Then you can get the "first" value as `OrderedDict` remembers order
#firstKey = next(iter(savedrequest))
first = next(iter(savedrequest.values()))

savedstation = first['station']
saveddirection = first['direction']

(这个答案要感谢and)

savedrequest
不是数组,它没有键
0
。您需要使用
'-bas'
(或
'-bus'
)。在该数组中,是否有方法选择第一个对象并从这些
方向
键获取值?为什么要访问键
0
?没有数组。您有一个JSON对象,它被转换为python dict。python中的字典本质上是无序的,因此没有“first”元素的概念。它不是数组,而是字典。字典没有排序,因此您无法使用[0]、[1]等访问它们。您只能通过字典中的键访问它们。没有其他方法。
savedrequest
不是数组,它没有键
0
。您需要使用
'-bas'
(或
'-bus'
)。在该数组中,是否有方法选择第一个对象并从这些
方向
键获取值?为什么要访问键
0
?没有数组。您有一个JSON对象,它被转换为python dict。python中的字典本质上是无序的,因此没有“first”元素的概念。它不是数组,而是字典。字典没有排序,因此您无法使用[0]、[1]等访问它们。您只能通过字典中的键访问它们。没有别的办法了。