用Flas访问Json和Jinja2内部的Most集

2024-06-26 14:01:20 发布

您现在位置:Python中文网/ 问答频道 /正文

使用一个返回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:

^{pr2}$

HTML/金贾2

{% for key, value in response.items() %}
    {% for items in value %}
        {{ items }}
    {% endfor %}
{% endfor %}

Tags: inapijsonforstringvalueitemsnull
1条回答
网友
1楼 · 发布于 2024-06-26 14:01:20

由于您的问题涉及到从Jinja2模板访问内部数据结构,所以我简化了我的示例(忽略了烧瓶的内容)。把我的答案应用到烧瓶上是微不足道的。在

首先,您的JSON数据是无效的,我必须更正orderedlist将其包含在"中,并将{}设置为大写,以"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)

运行它我们得到:

^{pr2}$

相关问题 更多 >