Оригинал на GitHub
Вопрос
Мне приходит json-список вложенных массивов с данными:
[
{
"firstLevel_1": "some_shit_value",
"firstLevel_2": {
"secondLevel_1": "value_1",
"secondLevel_2": {
"id": 10,
"value": "gold_11"
}
},
"Date": "value_21"
},
{
"firstLevel_1": "some_shit_value",
"firstLevel_2": {
"secondLevel_1": "value_1",
"secondLevel_2": {
"id": 11,
"value": "gold_11"
}
},
"Date": "value_22"
},
{
"firstLevel_1": "some_shit_value",
"firstLevel_2": {
"secondLevel_1": "value_1",
"secondLevel_2": {
"id": 12,
"value": "gold_11"
}
},
"Date": "value_23"
}
]
Нужно вытащить из него одно значение Date если мы знаем значение в ключе id.
Ответ
Если мы ищем Date по id
в этом примере то будет так:
=: #json_field[$row_num][Date]
row_num: $search_key_num[0]
search_key_num: listSearch(list: #json_field[[firstLevel_2]][[secondLevel_2]][[id]]; key: "value" = 11)
Этот код в системе Totum используется для получения значения из поля json_field
в текущей таблице, если вложенный ключ в этом поле равен определенному значению.
В данном случае, он ищет значение ключа Date, если вложенный ключ id равен 11.
#json_field[$row_num][Date]
: Основная строка кода, которая возвращает значение ключа Date из поля json_field в текущей таблице. Индекс строки определяется строкой кода row_num.
row_num
: Строка кода, которая определяет номер строки, где найдено совпадение. В данном случае, это первый элемент списка search_key_num.
search_key_num
: Список, который содержит номера строк, где найдено совпадение по ключу id со значением 11.
listSearch
: Функция, которая ищет все ключи в списке json_field и возвращает их номера, где значение ключа id равно 11.
#json_field[[firstLevel_2]][[secondLevel_2]][[id]]
: Указание на вложенный ключ id в поле json_field на третьем уровне, сначала firstLevel_2, потом secondLevel_2 и потом id.
key: "value" = 11
: Условие, по которому ищется совпадение. В данном случае, это значение 11.
На выходе мы получаем значение ключа Date из поля json_field, если вложенный ключ id равен 11.