gpt4 book ai didi

python - 使用 Python 和 if 语句解析 JSON

转载 作者:行者123 更新时间:2023-11-28 22:43:59 29 4
gpt4 key购买 nike

这是我拥有的 JSON 数据:

{
"response": {
"status": {
"version": "4.2",
"code": 0,
"message": "Success"
},
"artists": [
{
"name": "Taylor Swift",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:19614945368"
}
],
"hotttnesss": 0.99956,
"id": "ARS54I31187FB46721"
},
{
"name": "Ed Sheeran",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:9189674485"
}
],
"hotttnesss": 0.994265,
"id": "ARSDWSZ122ECCB706A"
},
{
"name": "Calvin Harris",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:19366141168"
}
],
"hotttnesss": 0.990559,
"id": "ARJRB241187FB556A3"
},
{
"name": "Sam Smith",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:313595788739120"
}
],
"hotttnesss": 0.988203,
"id": "ARUZM8A11C8A41519C"
},
{
"name": "Maroon 5",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:5330548481"
}
],
"hotttnesss": 0.984929,
"id": "ARF5M7Q1187FB501E8"
},
{
"name": "Sia",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:10959868407"
}
],
"hotttnesss": 0.983516,
"id": "AR6ENUY1187B994158"
},
{
"name": "David Guetta",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:7619396355"
}
],
"hotttnesss": 0.982656,
"id": "ARH2QI91187FB3788D"
},
{
"name": "Ellie Goulding",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:135027136641"
}
],
"hotttnesss": 0.981786,
"id": "ARKTTJV12592CDA07F"
},
{
"name": "Wiz Khalifa",
"foreign_ids": [
{
"catalog": "facebook",
"foreign_id": "facebook:artist:12138756141"
}
],
"hotttnesss": 0.978492,
"id": "ARN0GFV1187FB508CC"
},
{
"name": "Ariana Grande",
"hotttnesss": 0.978074,
"id": "AROHQCR13244CF7152"
}
]
}
}

我正在尝试解析“catalog”和“foreign_id”。这是我的代码:

for item in data['response']['artists']:
for row in item['foreign_ids']:
print row['catalog'], row['foreign_id']

结果是:

facebook facebook:artist:19614945368
facebook facebook:artist:9189674485
facebook facebook:artist:19366141168
facebook facebook:artist:313595788739120
facebook facebook:artist:5330548481
facebook facebook:artist:10959868407
facebook facebook:artist:7619396355
facebook facebook:artist:135027136641
facebook facebook:artist:12138756141

KeyError
Traceback (most recent call last)
<ipython-input-224-cbc34d6d831e> in <module>()
1 for item in data['response']['artists']:
----> 2 for row in item['foreign_ids']:
3 print row['catalog'], row['foreign_id']

KeyError: 'foreign_ids'

我想我知道为什么;最后一个数据行没有“foreign_ids”。我将如何包含 if 语句来帮助我避免此错误?例如,当没有名为“foreign_ids”的数组值时,代码输出“None”。

最佳答案

在尝试迭代之前,您必须检查该列是否存在。这种方法被称为“三思而后行”。这里我们使用 get,因为默认情况下它会返回 None 并且不会引发 KeyError

for item in data['response']['artists']:
if item.get('foreign_ids'):
for row in item['foreign_ids']:
print row['catalog'], row['foreign_id']

或者,您可以通过 get 使用默认值,它提供一个空列表来代替迭代。

for item in data['response']['artists']:
for row in item.get('foreign_ids', []):
print row['catalog'], row['foreign_id']

在这两种情况下,您都必须检查该 key 是否存在。您拥有的代码假定它始终存在,但事实并非如此。

关于python - 使用 Python 和 if 语句解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30062268/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com