【发布时间】:2020-05-04 11:07:21
【问题描述】:
我的测试 url 返回以下 json 响应: 一个={ “版本”:“1.3.0”, “服务”: [ { “版本”:“1.0.0”, "serviceGun": "com.xx.version.1", “描述”:“测试服务”, “链接”:[ { "rel": "能力", "href": "/abc/test", “提示”:[ { “方法”:“获取” } ]
},
{
"version": "1.0.0",
"serviceGun": "com.xx.abx.version.1",
"description": "mode",
"links": [
{
"rel": "mediaConfiguration",
"href": "/abc/rest",
"hints": [
{
"method": "get"
},
{
"method": "put"
} ]
},
{
"rel": "modeConfiguration",
"href": "/abc/mode",
"hints": [
{
"method": "get"
},
{
"method": "put"
} ]
},
{
"version": "1.0.0",
"serviceGun": "com.xx.abc.version.1",
"description": "controlPanel",
"links": [
{
"rel": "configuration",
"href": "/abc/controlPanel",
"hints": [
{
"method": "get"
},
{
"method": "put"
} ]
},
{
"rel": "state",
"href": "/abc/awc",
"state": "unavailable",
"stateReason": "inactivated",
"hints": [
{
"method": "get"
} ]
} ]
},
]
}
通过以下函数,我可以从 json 中检索单个值(例如 href、rel 等)。 但我希望该函数返回一个列表,其中包含所有“href”以及每个href的“提示”中的支持方法。例如:[(href1,hints1),(href1,hints1),(href1,hints1)]
预期输出:[('/abc/test',['get','put']),('/abc/rest',['get','put']),...]
def extract_values(obj, key): """从嵌套的 JSON 中拉取指定键的所有值。""" arr = []
def extract(obj, arr, key):
"""Recursively search for values of key in JSON tree."""
if isinstance(obj, dict):
for k, v in obj.items():
if isinstance(v, (dict, list)):
extract(v, arr, key)
elif k == key:
arr.append(v)
elif isinstance(obj, list):
for item in obj:
extract(item, arr, key)
return arr
results = extract(obj, arr, key)
return results
运行:test_ref = extract_values(a,'href') 打印 test_ref 输出:['/abc/test','/abc/rest',','/abc/mode','/abc/controlPanel','abc/awc']
预期输出:[('/abc/test',['get','put']),('/abc/rest',['get','put']),...]
【问题讨论】:
标签: json list python-2.7 dictionary