Django从JSON d获取值

2024-10-03 15:31:04 发布

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

我正在尝试使用一个开放的fda API。到目前为止一切正常。嵌套JSON数据的问题即将出现。在

以下是我的Json数据:

{
      "seriousnessother": "1",
      "reportduplicate": {
        "duplicatenumb": "US-BRISTOL-MYERS SQUIBB COMPANY-BMS-2017-086135",
        "duplicatesource": "BRISTOL MYERS SQUIBB"
      },
      "safetyreportversion": "1",
      "receiptdate": "20170927",
      "duplicate": "1",
      "seriousnessdeath": "1",
      "receivedate": "20170927",
      "patient": {
        "reaction": [
          {
            "reactionmeddrapt": "Death",
            "reactionmeddraversionpt": "20.1",
            "reactionoutcome": "5"
          },
          {
            "reactionmeddrapt": "Product use in unapproved indication",
            "reactionmeddraversionpt": "20.1",
            "reactionoutcome": "6"
          }
        ],
        "patientsex": "1",
        "drug": [
          {
            "drugstartdateformat": "102",
            "medicinalproduct": "OPDIVO",
            "drugindication": "COLORECTAL CANCER",
            "drugcharacterization": "1",
            "drugadministrationroute": "065",
            "drugenddateformat": "102",
            "drugseparatedosagenumb": "1",
            "drugstructuredosageunit": "032",
            "openfda": {
              "manufacturer_name": [
                "E.R. Squibb & Sons, L.L.C."
              ],
              "unii": [
                "31YO63LBSN"
              ],
              "product_type": [
                "HUMAN PRESCRIPTION DRUG"
              ],
              "spl_set_id": [
                "f570b9c4-6846-4de2-abfa-4d0a4ae4e394"
              ],
              "route": [
                "INTRAVENOUS"
              ],
              "generic_name": [
                "NIVOLUMAB"
              ],
              "brand_name": [
                "OPDIVO"
              ],
              "product_ndc": [
                "0003-3772",
                "0003-3734",
                "0003-3774"
              ],
              "pharm_class_epc": [
                "Programmed Death Receptor-1 Blocking Antibody [EPC]"
              ],
              "substance_name": [
                "NIVOLUMAB"
              ],
              "spl_id": [
                "2d33126d-5115-459e-bcaf-d0ace4fbe94e"
              ],
              "pharm_class_moa": [
                "Programmed Death Receptor-1-directed Antibody Interactions [MoA]"
              ],
              "application_number": [
                "BLA125554"
              ],
              "nui": [
                "N0000191259",
                "N0000191260"
              ],
              "package_ndc": [
                "0003-3734-13",
                "0003-3772-11",
                "0003-3774-12"
              ]
            },
            "drugstructuredosagenumb": "1",
            "drugintervaldosageunitnumb": "2",
            "drugstartdate": "20160907",
            "actiondrug": "5",
            "activesubstance": {
              "activesubstancename": "NIVOLUMAB"
            },
            "drugintervaldosagedefinition": "803",
            "drugauthorizationnumb": "125554",
            "drugrecurreadministration": "3",
            "drugdosagetext": "1 DF, Q2WK",
            "drugenddate": "20161222",
            "drugadditional": "3"
          }
        ]
      },
      "occurcountry": "US",
      "reporttype": "1",
      "companynumb": "US-BRISTOL-MYERS SQUIBB COMPANY-BMS-2017-086135",
      "safetyreportid": "14015990",
      "sender": {
        "senderorganization": "FDA-Public Use",
        "sendertype": "2"
      },
      "transmissiondate": "20171128",
      "fulfillexpeditecriteria": "1",
      "transmissiondateformat": "102",
      "receiptdateformat": "102",
      "receiver": {
        "receiverorganization": "FDA",
        "receivertype": "6"
      },
      "serious": "1",
      "receivedateformat": "102",
      "primarysource": {
        "reportercountry": "US",
        "qualification": "5"
      },
      "primarysourcecountry": "US"
    }

下面是我调用此数据并转换为Django数据的视图。在

^{pr2}$

我收到以下错误:

 patient_reaction_reactionmeddrapt = data['patient']['reaction'].get('reactionmeddrapt')
AttributeError: 'list' object has no attribute 'get'

请注意,响应结果中有许多数据。可能是其中一个结果没有病人场。但若as get方法不存在,则应返回None。 我想要字段值或者没有。 它适用于简单的Json数据,但是当array/list中有array/list时就会出现错误。在


Tags: 数据namejsongetcompanylistuspatient
2条回答

给定您的输入json:

"patient": {
    "reaction": [
      {
        "reactionmeddrapt": "Death",
        "reactionmeddraversionpt": "20.1",
        "reactionoutcome": "5"
      },
      {
        "reactionmeddrapt": "Product use in unapproved indication",
        "reactionmeddraversionpt": "20.1",
        "reactionoutcome": "6"
      }
    ],

“reactions”的数据值是一个列表。另外,据我所知,如果没有“patient”的数据值,则需要获取“reactionmeddrapt”属性值或无。在

你可以这样做:

^{pr2}$

既然反应是列表,你应该这样做:

reactions = data['patient']['reaction']
if reactions and isinstance(reactions, list):
    for reaction in reactions:
        patient_reaction_reactionmeddrapt = reaction.get('reactionmeddrapt')
else:
    patient_reaction_reactionmeddrapt = data['patient']['reaction'].get('reactionmeddrapt')

不是简单的:

^{pr2}$

data['patient']['reaction']在代码返回列表对象中。因此,您需要迭代它以获得每个列表元素的reactionmeddrapt。在

相关问题 更多 >