簡體   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