json = '{
"app": {
"Garden": {
"Flowers": {
"Red flower": "Rose",
"White Flower": "Jasmine",
"Yellow Flower": "Marigold"
}
},
"Fruits": {
"Yellow fruit": "Mango",
"Green fruit": "Guava",
"White Flower": "groovy"
},
"Trees": {
"label": {
"Yellow fruit": "Pumpkin",
"White Flower": "Bogan"
}
}
}'
Вот моя JSON строка, которая продолжает изменяться frquently поэтому положение ключей в словаре не то же самое каждый раз, мне нужно поисках ключа и распечатать его соответствующее значение, Поскольку строка json изменяется каждый раз, когда я написал рекурсивную функцию (см. Ниже) для поиска для ввода ключа в новой строке json и печати значения. Однако теперь ситуация заключается в том, что мы имеем один и тот же ключ несколько раз с значениями diff, как может получить полный путь ключа, поэтому было бы легче понять, какое значение ключа оно есть, например результат должен быть таким:JSON получить ключевой путь в гнездовой словаре
app.Garden.Flowers.white Flower = Jasmine
app.Fruits.White Flower = groovy
app.Trees.label.White Flower = Bogan
Мой код до сих пор:
import json
with open('data.json') as data_file:
j = json.load(data_file)
# j=json.loads(a)
def find(element, JSON):
if element in JSON:
print JSON[element].encode('utf-8')
for key in JSON:
if isinstance(JSON[key], dict):
find(element, JSON[key])
find(element to search,j)
Спасибо ... однако это рекурсивная функция, и она не будет возвращения None на end..может ли мы это исправить? – min2bro
Возвращение нескольких вещей из такой функции будет сложным. Более простой способ - иметь список, который вы передаете, как я добавил в этой отредактированной версии, которая собирает все конечные пути. После вызова функции 'all_paths' будет иметь все данные, которые будут напечатаны. – Brien
строка 7, в поиске путь = путь + элемент + '=' + JSON [element] .encode ('utf8') UnicodeDecodeError: кодек ascii не может декодировать байт 0xc3 в позиции 3: порядковый номер не в диапазоне (128) – min2bro