json1
[{'one.10': 'eno', 'three': 1, 'two': False},
{'one.21': 'eon', 'three': 2, 'two': True},
{'one.31': 'noe', 'three': 3, 'two': False}]
#{'one.x': 'oen', 'three': y, 'two': True}
С указанным выше файлом json1 в этом формате и с сильно вложенным json2:
json2['Item']["21"]
Немного запутано, но можно ли "21" заменить переменной? и если да, могли бы вы установить для переменной значение x равное one.x в json1, выполнив поиск значения y «три»: y », т.е. ищите 3 и получите x равное 31?
json2['Item'][x] # for known y
Редактировать. json1 на самом деле немного переключается:
[{"TextKey": "ItemName.x", "Name": "y", ...}
...]
json2 похож на:
{
"Item": {
"10": {
"djdj": True,
...
"hduf": "dpdk"
}
"11": {
"djdj": True,
"info": {
...
}
...
"hduf": "dppk"
}
...
}
}
Похоже, что это больше, чем просто "немного" запутано: p, но, да, все это можно сделать. Я думаю. Вы хотите что-то вроде json2['Item2'][extract_x_from_one_key (json1[index_of_three_value])? "Обязательно" ли хранить данные таким образом?
Я понимаю ваш вопрос (отчасти сложный), вы хотите получить значения из файла json1. значение "x" - это "one.x" в первом столбце, значение y - это значение перед ключевым словом "three" ??? Вы хотите найти строку на основе ключевого слова "y", а затем использовать "x" из этой строки для использования в >> json2 ["item"] [x] ??? я прав???
@fazkan: Что значит сказать значение перед ключевым словом "три" для данных в словаре (который неупорядочен)?
Не ожидал такого быстрого ответа. в любом случае json1 и json2 - это внешние файлы, в которых я могу их читать и назначать переменной в порядке. @fazkan y будет "'' three ': y" или, скорее, "three": "y" ". Число x является идентификатором гнезда в json2. Данные не обязательно должны храниться таким образом, но в идеале я бы оставил как есть. Я полагаю, что присвоенная переменная может быть изменена в случае необходимости.
Но да, @Terminus что-то вроде этой команды, в настоящее время я даже не могу заставить переменную работать вместо "21"
У вас есть образец json2, который вы можете разместить здесь?
json2 сильно вложен, но это "правильный" json, если есть такая вещь, поэтому ['Item'] ["21"] выводит из него правильное гнездо, json1 я не могу сделать то же самое, что и гнезда aren не идентифицируется извне (это диктат или какой-то массив, верно?)






Вот один из способов поиска по свойству элементов в json1, чтобы получить ключи для элементов в json2.
Сценарий
json1 = [
{"TextKey": "ItemName.09", "ID" : 0},
{"TextKey": "ItemName.18", "ID" : 1},
{"TextKey": "ItemName.27", "ID" : 2},
{"TextKey": "ItemName.36", "ID" : 3},
{"TextKey": "ItemName.45", "ID" : 4},
{"TextKey": "ItemName.54", "ID" : 5}
]
json2 = {
"Item": {
"09": { "data": "a" },
"18": { "data": "b" },
"27": { "data": "c" },
"36": { "data": "d" },
"45": { "data": "e" },
"54": { "data": "f" }
}
}
json1SearchValues = [4,2,9]
for searchVal in json1SearchValues:
# Use list comprehension to search json1 on property ID by searchVal
json1Item = [j1 for j1 in json1 if j1["ID"] == searchVal]
# Assuming ID is unique, expecting one match
if len(json1Item) == 1:
json2ItemKey = json1Item[0]["TextKey"].split(".")[1]
print "Found (json1 ID = " + str(searchVal) + ") -> (json2 Key = " + json2ItemKey + ") -> " + str(json2["Item"][json2ItemKey])
# If there is no or more than one json1 item with that ID, do something else
else:
print "Invalid Key (" + str(searchVal) + ")"
Выход
Found (json1 ID = 4) -> (json2 Key = 45) -> {'data': 'e'}
Found (json1 ID = 2) -> (json2 Key = 27) -> {'data': 'c'}
Invalid Key (9)
Я получаю недопустимый синтаксис в строках печати, которые нужно () это. то есть: print ("Invalid Key (" + str (searchVal) + ")"), просто нужно проверить, что я получаю то, что мне нужно, с импортированными jsons
Пришлось немного поиграть с числами, так как это не строго уникально, но дело сделано. Я очень признателен, я пробовал j1 для j1 ... ранее, но сам ни к чему не приводил. Затем мне нужно перевернуть и получить ключ от json2 для json1, но теперь это должно быть достаточно тривиально
Это могло бы помочь людям, если бы вы подробнее остановились на вопросе. Что вы на самом деле пытаетесь сделать? Вам в значительной степени нужно объяснять все, что вы записали, потому что никто не может понять ваш вопрос.