来自 API 请求的 JSON 存储为单个 key:value 如何将其转换为字典?

JSON from an API request stores as a single key:value how do I convert it to a dictionary?

我一直在尝试使用来自休息 API 调用的获取请求。将以下 url 放入 link 中时,数据显示在 JSON.

https://rxnav.nlm.nih.gov/REST/rxclass/classMembers.json?classId=C&relaSource=ATC&trans=0

下面是我的代码,其中大部分是注释,大部分是我尝试过的。

import urllib3
from urllib3 import request
import json
import ndjson
import pandas as pd
from pandas.io.json import json_normalize

http = urllib3.PoolManager()
url ='https://rxnav.nlm.nih.gov/REST/rxclass/classMembers.json?classId=C&relaSource=ATC&trans=0'
resp = http.request("GET", url)
data = json.loads(resp.data.decode('utf-8'))


#with open(data) as f:                       ##expected str, byes or os.pathlike object not dict.  This was for a malformed json test.
#    source = f.read()
#    source = source.replace('}{', '}\n{')
#    data = ndjson.loads(source)

#print(data)

#print(data.key())  # drugMemberGroup
#print(data.values()) #prints the entire json

df = pd.json_normalize(data, 'drugMemberGroup')  # prints the entire json since it's stored as a single key
#print(df.head(10))

#with open(df) as f:                      # doesn't change anything still prints a single key:value for df
#    source = f.read()
#    source = source.replace('}{', '}\n{')
#    data = ndjson.loads(source)
#print(df)

#print(df.key())

#b = json.loads(data)  #TypeError: the JSON object must be str, bytes or bytearray, not dict
#print(b["rxcui"])   #if I use pdf instead of data then I get the entire json for a single key

#rxcuijson = json.dumps(data)  #TypeError: the JSON object must be str, bytes or bytearray, not dict
#print(rxcuijson) #if I use pdf instead of data then I get the entire json for a single key

我已将 JSON 粘贴到 JSON 查看器中,树看起来如下所示,因此我认为它的格式不正确 JSON。但是,我确实尝试了 ndjson 以防万一。:

object      {1}
    drugMemberGroup     {1}
    drugMember      [326]
    0       {2}
    minConcept      {3}
rxcui   :   1007489
name    :   felodipine / metoprolol
tty :   MIN
    nodeAttr        [3]
    0       {2}
attrName    :   SourceId
attrValue   :   C07FB02
    1       {2}
attrName    :   SourceName
attrValue   :   metoprolol and felodipine
    2       {2}
attrName    :   Relation
attrValue   :   INDIRECT
    1       {2}
    minConcept      {3}
rxcui   :   1009219
name    :   aliskiren / amlodipine
tty :   MIN
    nodeAttr        [3]
    0       {2}
attrName    :   SourceId
attrValue   :   C09XA53
    1       {2}
attrName    :   SourceName
attrValue   :   aliskiren and amlodipine
    2       {2}
attrName    :   Relation
attrValue   :   INDIRECT
    2       {2}
    minConcept      {3}
rxcui   :   1033889
name    :   amlodipine / perindopril
tty :   MIN
    nodeAttr        [3]
    0       {2}
attrName    :   SourceId
attrValue   :   C09BB04
    1       {2}
attrName    :   SourceName
attrValue   :   perindopril and amlodipine
    2       {2}
attrName    :   Relation
attrValue   :   INDIRECT

我希望 GET 请求中的 JSON 作为字典通过,这样我就可以将它放入表格格式,或者在数据框中使用它。我尝试的所有操作都将 JSON 作为单个 key:value 字典。唯一可用的键是 drugMemberGroup 键,我相信我的问题就在于此。

如您所见,我尝试使用 pandas、json、ndjson、json_normalize,但似乎都无法正常工作。任何能指出我正确方向的东西都将不胜感激。感觉这应该是一个容易解决的问题,但一直很头疼。

你看过数据了吗?您有一个只有一个键“drugMemberGroup”的字典,它本身包含一个键“drugMember”。该密钥包含列表,我怀疑这是您要处理的列表。像这样:

df = pd.json_normalize(data['drugMemberGroup']['drugMember]') 

顺便说一下,您应该使用出色的 jq 工具来查看 JSON 数据。在它的其他用途中,它以非常结构化的格式打印 JSON。