我需要在Flask中阅读以下JSON数据:
{
"NewList":[
{
"key" : "myvalue1",
"value" : "value1"
},
{
"key" : "myvalue2",
"value" : "value2"
},
{
"key" : "myvalu3",
"value" : "value4"
}
]
}
我很难这样做。我目前的代码如下:
@app.route('/dataread', methods=['GET', 'POST'])
def dataread():
if(request.json):
myvalue1 = request.json['NewList']['myvalue1']
return str(myvalue1)
else:
return 'nothing'
但它不起作用。我收到以下错误:
KeyError:'NewList'
我知道我的语法一定是错的,但我无法弄清楚如何修复它。对不起这个新问题我很抱歉。请帮忙。
感谢。
答案 0 :(得分:1)
我不确定你的哪个部分有问题,所以我做得很长。它显然不理想,但应该很容易理解。但我会回应上面的评论,你应该首先准确打印你所得到的。可能不完全匹配。
字典是一组字典列表,因此您最终会为每个字典行走。
dict = {
"NewList":[
{
"key" : "myvalue1",
"value" : "value1"
},
{
"key" : "myvalue2",
"value" : "value2"
},
{
"key" : "myvalu3",
"value" : "value4"
}
]
}
for firstkey, big_list in dict.items():
print('print dict: ' + str(firstkey))
for pair in big_list:
print('print sets in dict: ' + str(pair))
nextdict = pair
for nextkey, small_list in nextdict.items():
print('print each: ' + str(nextkey)+ '->' + str(small_list))
#address each one
print('pull just data: ' + str(nextdict[nextkey]))
"""
results
print dict: NewList
print sets in dict: {'key': 'myvalue1', 'value': 'value1'}
print each: key->myvalue1
pull just data: myvalue1
print each: value->value1
pull just data: value1
print sets in dict: {'key': 'myvalue2', 'value': 'value2'}
print each: key->myvalue2
pull just data: myvalue2
print each: value->value2
pull just data: value2
print sets in dict: {'key': 'myvalu3', 'value': 'value4'}
print each: key->myvalu3
pull just data: myvalu3
print each: value->value4
pull just data: value4
"""
答案 1 :(得分:1)
您的示例中有一些错误的地方。 json实际上被解释为:
{ "NewList":[
{
"key1" : "value1",
"key2" : "value2"
},
{
"key1" : "value1",
"key2" : "value2"
}
]}
因此在您的示例中,myvalue1是一个值而不是键。
然而,主要错误是烧瓶中的request.json()仅返回整个json输入,您无法从json中选择某些元素。同时不建议使用request.json,因此现在应为request.get_json()
因此,根据您的输入数据,最终的解决方案将是
{
"NewList":[
{
"key" : "myvalue1",
"value" : "value1"
},
{
"key" : "myvalue2",
"value" : "value2"
},
{
"key" : "myvalu3",
"value" : "value4"
}
]
}
@app.route('/dataread', methods=['GET', 'POST'])
def dataread():
if(request.data):
jdata = request.get_json()
return str(jdata['Newlist'][0]['key'])
else:
return 'nothing'
[0]是数组中第一个对象,它是Newlist的值。 除非您知道它将永远是数组元素0,否则您将获得过时的数据,并且还需要返回“键”的值。鉴于输入数据,我怀疑您可能想要更多类似的东西。
if(request.data):
jdata = request.get_json()
for j in jdata['Newlist']:
if j['key'] == 'myvalue1':
return str(j['value'])
return 'not found'
else:
return 'nothing'
答案 2 :(得分:0)
newList
的值为list
。在阅读"key"
和"value"
之前,您必须先访问此列表中的元素。
# print first item in the list
print(request.json['NewList'][0]['value']
# print them all
for item in request.json['NewList']
print(item['key'])
print(item['value'])