我正在尝试从我从API接收到的复杂且非常嵌套的JSON响应中创建一个数据框。如果有用的话,请参见API的文档:https://www.bookthatapp.com/docs/api/v1/index.html
我可以使用pandas json_normalize来获取需要加载的大部分列,但是在一定程度上超出了结构的一致性,我认为这是造成我问题的原因。
具体来说,在“容量”内,有两种潜在类型。如果类型是'variant_option',那么在容量范围内还将有'options'和'capacity'键,其中有'values'和'capacity'键。
例如:
'capacity': {'type': 'variant_option',
'options': ['Size'],
'capacities': [{'values': ['S/M'], 'capacity': 2},
{'values': ['M/L'], 'capacity': 4}]}
但是,如果产品类型为“ product”,则将存在另一个称为“ capacity”的键,该键直接控制容量。
例如:
'capacity': {'type': 'product', 'capacity': 8}
我目前正在Jupyter笔记本中运行它。
url = 'https://api.bookthatapp.com/v1/products'
headers = {
'Authorization': 'Bearer ' + key
}
r = requests.get(url, headers= headers)
r2 = r.json()
df = json_normalize(r2['products'],
record_path=['capacity'],
meta = ['title','id','external_id',['capacity','type']]
)
df
当前结果:
0 | title | id | external_id | capacity.type
type | helmet rental | 38425 | 3668508801 | variant_option
options | helmet rental | 38425 | 3668508801 | variant_option
capacities | helmet rental | 38425 | 3668508801 | variant_option
type | showshoe rental | 38426 | 3668840705 | product
capacity | showshoe rental | 38426 | 3668840705 | product
所需结果:
title | id | external_id | variant | capacity
helmet rental | 38425 | 3668508801 | s/m | 1
helmet rental | 38425 | 3668508801 | m/l | 2
snowshoe tail rental | 38426 | 3668840705 | null | 4