在Python / Flask中读取JSON数组值

时间:2017-07-04 15:36:07

标签: python json flask

我需要在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'

我知道我的语法一定是错的,但我无法弄清楚如何修复它。对不起这个新问题我很抱歉。请帮忙。

感谢。

3 个答案:

答案 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'])