我有一个json对象,正在尝试从嵌套列表中提取几个值。然后在标记中打印它们。我遇到了错误-AttributeError:“列表”对象没有属性“获取”
我知道这是一个列表,我无法执行获取。我已经在寻找合适的方法了几个小时,但我已经精疲力尽了。我可以获取事件,但不能获取Value1和Value2。
这是json对象
{
"resource": {
"data": {
"event": "qwertyuiop",
"eventVersion": "1.05",
"parameters": {
"name": "sometext",
"othername": [
""
],
"thing": {
"something": {
"blah": "whatever"
},
"abc": "123",
"def": {
"xzy": "value"
}
},
"something": [
"else"
]
},
"whatineed": [{
"value1": "text.i.need",
"value2": "text.i.need.also"
}]
}
}
}
这是我的功能
def parse_json(json_data: dict) -> Info:
some_data = json_data.get('resource', {})
specific_data = some_data.get('data', {})
whatineed_data = specific_data.get('whatineed', {})
formatted_json = json.dumps(json_data, indent=2)
description = f'''
h3. Details
*Event:* {some_data.get('event')}
*Value1:* {whatineed_data('value1')}
*Value2:* {whatineed_data('value2')}
'''
答案 0 :(得分:0)
从数据结构来看,whatineed
是带有单个项目的list
,而后者又是一个字典。因此,一种访问方式是:
whatineed_list = specific_data.get('whatineed', [])
whatineed_dict = whatineed_list[0]
您现在可以执行以下操作:
value1 = whatineed_dict.get('value1')
value2 = whatineed_dict.get('value2')
答案 1 :(得分:0)
您可以将功能更改为以下内容:
def parse_json(json_data: dict) -> Info:
some_data = json_data.get('resource')
specific_data = some_data.get('data', {})
whatineed_data = specific_data.get('whatineed', {})
formatted_json = json.dumps(json_data, indent=2)
description = '''
h3. Details
*Event:* {}
*Value1:* {}
*Value2:* {}
'''.format(some_data.get('data').get('event'),whatineed_data[0]['value1'], whatineed_data[0]['value2'])
由于whatineed_data
是一个列表,因此您需要先索引元素
答案 2 :(得分:0)
Python会将json作为字符串处理,除非它们直接来自文件。这可能是某些问题的根源。另外,this article可能会有帮助。
答案 3 :(得分:0)
假设“ whatineed”属性确实是一个列表,并且它的元素是字典,则不能调用whatineed.get就像它们是属性一样询问Value1或Value2,因为它是一个列表,并且没有属性。
因此,您有两个选择:
element = whatineed[0]
v1 = element.get('value1', {})
v2 = element.get('value2', {})
for element in whatineed:
v1 = element.get('value1', {})
v2 = element.get('value2', {})
## Do something with values