繁体   English   中英

从 JSON 导入数据问题 - Python

[英]Importing data from JSON issue - Python

我正在尝试解析来自 JSON 的数据并打印来自特定键(Crust)的值。 问题是我收到错误TypeError: list indices must be integers, not str 此错误适用于Crust=response.json()['Crust']行有什么想法吗?

import requests
import json

if __name__=='__main__':

response=requests.get("https://order-pizza-api.herokuapp.com/api/orders")
Crust=response.json()['Crust']
jprint(Crust)

来自https://order-pizza-api.herokuapp.com/api/orders的响应是一个对象列表,因此您不能像对字典一样对其进行索引。 见下文

[
  {
    "Crust": "NORMAL",
    "Flavor": "BEEF-NORMAL",
    "Order_ID": 1,
    "Size": "M",
    "Table_No": 1,
    "Timestamp": "2019-12-03T18:21:08.669365"
  },
  {
    "Crust": "THIN",
    "Flavor": "CHEESE",
    "Order_ID": 2,
    "Size": "S",
    "Table_No": 5,
    "Timestamp": "2019-12-03T18:21:08.708470"
  },
  {
    "Crust": "NORMAL",
    "Flavor": "CHICKEN-FAJITA",
    "Order_ID": 3,
    "Size": "L",
    "Table_No": 3,
    "Timestamp": "2019-12-03T18:21:08.710006"
  }
]

要获得外壳,您必须从列表中查找 select 字典并获取外壳。

response = requests.get("https://order-pizza-api.herokuapp.com/api/orders")
resp_json = response.json()
print(len(resp_json))  # 3
print(resp_json[0]["Crust"])  # NORMAL
print(resp_json[1]["Crust"])  # THIN
print(resp_json[2]["Crust"])  # NORMAL

要获得所有的外壳,可以迭代响应并抓取每个外壳。

[item["Crust"] for item in resp_json]

尝试这个:

In [19]: import ast

In [20]: response = requests.get("https://order-pizza-api.herokuapp.com/api/orders")

In [21]: ast.literal_eval(response.content.decode())
Out[21]:
[{'Crust': 'NORMAL',
  'Flavor': 'BEEF-NORMAL',
  'Order_ID': 1,
  'Size': 'M',
  'Table_No': 1,
  'Timestamp': '2019-12-03T18:21:08.669365'},
 {'Crust': 'THIN',
  'Flavor': 'CHEESE',
  'Order_ID': 2,
  'Size': 'S',
  'Table_No': 5,
  'Timestamp': '2019-12-03T18:21:08.708470'},
 {'Crust': 'NORMAL',
  'Flavor': 'CHICKEN-FAJITA',
  'Order_ID': 3,
  'Size': 'L',
  'Table_No': 3,
  'Timestamp': '2019-12-03T18:21:08.710006'}]

In [22]: [x['Crust'] for x in ast.literal_eval(response.content.decode())]
Out[22]: ['NORMAL', 'THIN', 'NORMAL']

这是单线:

In [33]: [x['Crust'] for x in requests.get("https://order-pizza-api.herokuapp.com/api/orders").json()]
Out[33]: ['NORMAL', 'THIN', 'NORMAL']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM