使用返回JSON的API,我无法弄清楚如何访问值的最内层元素。我剩下的是一个单一的键和值,这是所有的数据。
{
"results": [
{
"DataverseName": "Metadata",
"DatatypeName": "NodeGroupRecordType",
"Derived": {
"Tag": "RECORD",
"IsAnonymous": false,
"EnumValues": null,
"Record": {
"IsOpen": true,
"Fields": {
orderedlist: [
{
"FieldName": "GroupName",
"FieldType": "string"
},
{
"FieldName": "NodeNames",
"FieldType": "Field_NodeNames_in_NodeGroupRecordType"
},
{
"FieldName": "Timestamp",
"FieldType": "string"
}
]
}
},
"Union": null,
"UnorderedList": null,
"OrderedList": null
},
"Timestamp": "Wed Apr 30 15:55:24 PDT 2014"
}
]
}
我正在尝试访问集orderedlist
并需要获取FieldName
的值。在python中,我使用的是SimpleJson,当迭代结果时,一切都是混在一起。我是否必须重新编码JSON,以便值现在是键,并一直持续到ordredlist
?
的Python:
j = json.loads(response.text)
return render_template('fields.html', response=j, dataverse=dataset)
HTML / JinJa2
{% for key, value in response.items() %}
{% for items in value %}
{{ items }}
{% endfor %}
{% endfor %}
答案 0 :(得分:0)
由于您的问题与从Jinja2模板访问内部数据结构有关,我简化了我的示例(忽略了Flask的内容)。将我的答案应用于Flask将是微不足道的。
首先,您的JSON数据无效,我必须更正orderedlist
并将其"
括起来,并将l
设置为大写,结束"orderedList"
。
然后,从Jinja2访问数据很有趣 - 您可以使用点表示法访问它(但也可以使用[“SomeName”]。请注意,如果您要求的数据不存在,Jinja2将隐藏许多问题。应该从外层结构一步一步地玩你的模板,你会得到你想要的东西。
from jinja2 import Template
import json
response_text = """
{
"results": [
{
"DataverseName": "Metadata",
"DatatypeName": "NodeGroupRecordType",
"Derived": {
"Tag": "RECORD",
"IsAnonymous": false,
"EnumValues": null,
"Record": {
"IsOpen": true,
"Fields": {
"orderedList": [
{
"FieldName": "GroupName",
"FieldType": "string"
},
{
"FieldName": "NodeNames",
"FieldType": "Field_NodeNames_in_NodeGroupRecordType"
},
{
"FieldName": "Timestamp",
"FieldType": "string"
}
]
}
},
"Union": null,
"UnorderedList": null,
"OrderedList": null
},
"Timestamp": "Wed Apr 30 15:55:24 PDT 2014"
}
]
}
"""
data = json.loads(response_text)
templ_str = """
{% for rec in data.results %}
Results: -------------
{% for fldinfo in rec.Derived.Record.Fields.orderedList %}
Field: Name: {{fldinfo.FieldName}} Type: {{fldinfo.FieldType}}
{% endfor %}
{% endfor %}
"""
template = Template(templ_str)
print template.render(data=data)
运行它我们得到:
Results: -------------
Field: Name: GroupName Type: string
Field: Name: NodeNames Type: Field_NodeNames_in_NodeGroupRecordType
Field: Name: Timestamp Type: string