请求返回的文本字符串不会 ast.literal_eval 列出
Text string returned by request won't ast.literal_eval to list
调用带有请求的 API 以查找代码的描述。 API returns 看起来像列表的字符串。我无法将字符串转换为带有 ast.literal_eval 的列表。我尝试了多种响应类型(.text、.raw 等)和 map、str 等的变体来转换字符串。希望将响应放入任何可用的 Python 对象。
import requests
import ast
burl = "https://clinicaltables.nlm.nih.gov/" \
"api/icd10cm/v3/search?sf=code,name&maxList=1&terms="
dotted_code = "W59.21XS"
r = requests.get(burl+dotted_code).text
print(r)
响应是:
[1,["W59.21XS"],null,[["W59.21XS","Bitten by turtle, sequela"]]]
但如果我添加:
l = ast.literal_eval(r)
print(l)
我得到:
文件 "D:\Local\Continuum\anaconda3\lib\ast.py",第 55 行,在 _convert_num
提高 ValueError('malformed node or string: ' + repr(node))
ValueError:节点或字符串格式错误:<_ast.Name 0x0000015A01B670B8 处的对象>
有没有更好的方法将 return 文本转换为可用的 Python 对象?
那是 JSON:
>>> import json
>>> json.loads("""[1,["W59.21XS"],null,[["W59.21XS","Bitten by turtle, sequela"]]]""")
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]
为什么 literal_eval
不起作用的原因是 null
在 Python 中不存在,所以 literal_eval
没有想法如何处理它。如果您要将 null
更改为 None
(或字符串 'null'
),那么 literal_eval
将起作用:
>>> literal_eval('''[1,["W59.21XS"], None, [["W59.21XS","Bitten by turtle, sequela"]]]''')
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]
您可以使用 response.json
:
>>> r = requests.get('https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?sf=code,name&maxList=1&terms=W59.21XS')
>>> r.json()
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]
# ^ Note that null was automatically converted to None
调用带有请求的 API 以查找代码的描述。 API returns 看起来像列表的字符串。我无法将字符串转换为带有 ast.literal_eval 的列表。我尝试了多种响应类型(.text、.raw 等)和 map、str 等的变体来转换字符串。希望将响应放入任何可用的 Python 对象。
import requests
import ast
burl = "https://clinicaltables.nlm.nih.gov/" \
"api/icd10cm/v3/search?sf=code,name&maxList=1&terms="
dotted_code = "W59.21XS"
r = requests.get(burl+dotted_code).text
print(r)
响应是: [1,["W59.21XS"],null,[["W59.21XS","Bitten by turtle, sequela"]]]
但如果我添加:
l = ast.literal_eval(r)
print(l)
我得到:
文件 "D:\Local\Continuum\anaconda3\lib\ast.py",第 55 行,在 _convert_num 提高 ValueError('malformed node or string: ' + repr(node))
ValueError:节点或字符串格式错误:<_ast.Name 0x0000015A01B670B8 处的对象>
有没有更好的方法将 return 文本转换为可用的 Python 对象?
那是 JSON:
>>> import json
>>> json.loads("""[1,["W59.21XS"],null,[["W59.21XS","Bitten by turtle, sequela"]]]""")
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]
为什么 literal_eval
不起作用的原因是 null
在 Python 中不存在,所以 literal_eval
没有想法如何处理它。如果您要将 null
更改为 None
(或字符串 'null'
),那么 literal_eval
将起作用:
>>> literal_eval('''[1,["W59.21XS"], None, [["W59.21XS","Bitten by turtle, sequela"]]]''')
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]
您可以使用 response.json
:
>>> r = requests.get('https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search?sf=code,name&maxList=1&terms=W59.21XS')
>>> r.json()
[1, ['W59.21XS'], None, [['W59.21XS', 'Bitten by turtle, sequela']]]
# ^ Note that null was automatically converted to None