繁体   English   中英

如何通过在 Python 中使用数组动态访问嵌套的 JSON 键?

[英]How can I access nested JSON keys dynamically by using an array in Python?

我想做的是创建一个函数,我将一个字符串数组和一个 json 传递给该函数,该函数将检查 json 是否具有数组指定的键并返回它们的相应值。 在这里,我有一个适用于顶级键(及其值)的片段:

import json


def check_key_and_return(json, keys):
    if keys[0] in json:
        return json[keys[0]]
    else:
        return ''


if __name__ == '__main__':
    json_s = '{"a":{"b":1}}'
    json = json.loads(json_s)
    print(check_key_and_return(json, ['a']))

这将返回{'b': 1}

我希望能够传递多个字符串,例如check_key_and_return(json, ['a', 'b']) ,以便该函数返回1 (如果未找到匹配项,则返回空字符串。

谢谢你。

由于嵌套键成为父键的值,因此您将有一个迭代器来获取所有键。 其中一种方法可能是:

import numpy as np
import pandas as pd
import json
from collections.abc import Mapping
def nested_keys(d) -> set:
    """
    Return a set containing all nested keys.
    """
    # If it is not a dict-like object, return an empty set
    if not isinstance(d, Mapping):
        return set()

    keys = d.keys()
    for v in d.values():
        # Update the keys set with the keys in each value by using the union (or) operator: |
        keys |= nested_keys(v)

    return keys

str='{"a":{"b":1}}'
json_str = json.loads(str)
print(json_str)
all_keys=nested_keys(json_str)
print(nested_keys(json_str))
find_set1={'a','c'}
print(find_set1.issubset(all_keys))
find_set2={'a','b'}
print(find_set2.issubset(all_keys))

输出:

{'a': {'b': 1}}
{'a', 'b'}
False
True

现在基于上述条件(真/假),您可以返回 1 或空字符串。

暂无
暂无

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

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