来自 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。
我一直在尝试使用来自休息 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。