【发布时间】:2021-08-18 00:35:21
【问题描述】:
我有一个 JSON,其中包含一个并不总是存在的键字典,至少不是所有的键都一直在同一个位置。例如,“生产者”并不总是出现在数组 dict [2] 上,或者“导演”并不总是出现在 JSON 的 [1] 上,它完全取决于我传递给函数的 JSON。根据 ['plist']['dict']['key'] 中可用的内容,内容被映射到 dict 0,1,2,3(工作室除外)...
如何找到演员、导演、制片人等对应的数组,因为他们每个人并不总是位于相同的数组编号?! 最后,我总是希望能够为正确的字段提取正确的数据,即使 ['plist']['dict']['key'] 有时可能会根据映射的字典而有所不同。
...
def get_plist_meta(element):
if isinstance(element, dict):
return element["string"]
return ", ".join(i["string"] for i in element)
...
### Default map if all fields are present
# 0 = cast
# 1 = directors
# 2 = producers
# 3 = screenwriters
plist_metadata = json.loads(dump_json)
### make fields match the given sequence 0 = cast, 1 = directors etc. ()
if 'cast' in plist_metadata['plist']['dict']['key']:
print("Cast: ", get_plist_meta(plist_metadata['plist']['dict']['array'][0]['dict']))
if 'directors' in plist_metadata['plist']['dict']['key']:
print("Directors: ", get_plist_meta(plist_metadata['plist']['dict']['array'][1]['dict']))
if 'producers' in plist_metadata['plist']['dict']['key']:
print("Producers: ", get_plist_meta(plist_metadata['plist']['dict']['array'][2]['dict']))
if 'screenwriters' in plist_metadata['plist']['dict']['key']:
print("Screenwriters: ", get_plist_meta(plist_metadata['plist']['dict']['array'][3]['dict']))
if 'studio' in plist_metadata['plist']['dict']['key']:
print("Studio: ", plist_metadata['plist']['dict']['string'])
JSON:
{
"plist":{
"@version":"1.0",
"dict":{
"key":[
"cast",
"directors",
"screenwriters",
"studio"
],
"array":[
{
"dict":[
{
"key":"name",
"string":"Martina Piro"
},
{
"key":"name",
"string":"Ralf Stark"
}
]
},
{
"dict":{
"key":"name",
"string":"Franco Camilio"
}
},
{
"dict":{
"key":"name",
"string":"Kai Meisner"
}
}
],
"string":"Helix Films"
}
}
}
也可以在这里获取JSON:https://pastebin.com/JCXRs3Rw
提前致谢
【问题讨论】:
-
确保在您的帖子以及外部链接中包含示例数据。 stackoverflow.com/help/how-to-ask