繁体   English   中英

是否可以根据python中的另一个键搜索json对象键?

[英]Is it possible to search a json object key based on another key in python?

这里有 json 菜鸟。 我的json数据如下:

响应: [{'id': '1', 'name': 'TimeCheck1'},{'id': '2', 'name': 'TimeCheck2'}]

我需要根据'name' “Timecheck1”将'id'的值显示为 1。

response= [{'id': '1', 'name': 'TimeCheck1'},{'id': '2', 'name': 'TimeCheck2'}]

    # change the JSON string into a JSON object
    jsonObject = json.dumps(response)

    a ='TimeCheck1'
        
    if a in jsonObject:
        #print(jsonObject[a])
        print(json.dumps(jsonObject[a]))
    else:
        print("no")

我正在尝试上面的代码到达某个地方,但我一直面临错误'string indices must be integers'

您似乎已经对响应进行了解码。 json.dumps只是将该数据转换回字符串。 此函数将查找名称并在找到时返回项目的 id,否则返回 None。

def find_id_by_name(response, name):
    for item in response:
        if item["name"] == name:
            return item["id"]
    else:  # not found
        return None

id = find_id_by_name(response, name)

if id is None:
    print("Not found")

json.dumps返回一个字符串。

>>> import json
>>> help(json.dumps)
Help on function dumps in module json:

dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
    Serialize ``obj`` to a JSON formatted ``str``.
...

也许你打算做

>>> response= [{'id': '1', 'name': 'TimeCheck1'},{'id': '2', 'name': 'TimeCheck2'}]
>>> a = 'TimeCheck1'
>>> for d in response:
...     if a == d['name']:
...             print(json.dumps(d))
...     else:
...             print("no")
...
{"id": "1", "name": "TimeCheck1"}
no
>>> 

这个问题要么是关于json要么不是。 我猜不是。 所以让我们在此基础上继续。

您的response变量似乎是一个列表,因此我们可以对其进行迭代:

response= [{'id': '1', 'name': 'TimeCheck1'},{'id': '2', 'name': 'TimeCheck2'}]

target ='TimeCheck1'
for item in response:
        
    if item['name'] == target:
        print(f'Found: "{target}" with id:{item["id"])')
        break
else:
    print("no")

你可以这样做,

response= [{'id': '1', 'name': 'TimeCheck1'},{'id': '2', 'name': 'TimeCheck2'}]

    # change the JSON string into a JSON object
    jsonObject = json.dumps(response)

    a = 'TimeCheck1'
        
    for x in range(len(jsonObject)):
        if jsonObject[x]['name'] == a
        print(jsonObject[x]['id'])
    else:
        print("no")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM