#javascript #json #shell #jq
#javascript #json #оболочка #jq
Вопрос:
У меня есть объект JSON следующим образом
{«Образец»: [{ «ключ»: «Ключевое имя», «значения»: [ [1025409600000, 10], [1028088000000, -6.3382185140371] ] }]}
Используя javascript, я могу изменять любые значения следующим образом
data.Sample[0].values.push([1028088000000,0]);
Как выполнить аналогичную операцию с помощью json-процессора командной строки jq? Таким образом, объект JSON становится
{«Образец»: [{ «ключ»: «Ключевое имя», «значения»: [ [1025409600000, 10], [1028088000000, 0] ] }]}
Спасибо.
Комментарии:
1. итак, каков ожидаемый результат? 1028088000000 заменяется на 0?
2. Спасибо за ваш ответ. Таким образом, объект JSON становится {«Sample» : [{ «key»: «keyName», «values»: [ [1025409600000, 10], [1028088000000, 0] ] }]}
Ответ №1:
В нынешнем виде в вопросе есть ошибка, поскольку Array.push Javascript добавляется к массиву.
Эквивалент jq данного выражения:
data.Sample[0].values.push([1028088000000,0]);
было бы:
.Sample[0].values = [[1028088000000,0]]
или, если вы хотите использовать синтаксис Javascript, вы могли бы определить def push(x): .[length] = x;
Если вы хотите заменить последнее значение в values
массиве другим значением, скажем, $ x, вы можете (используя jq 1.5 или более позднюю версию) написать:
.Sample[0].values[-1] = $x
Более надежный (в отношении различных выпусков jq) подход будет:
.Sample[0].values |= (.[length-1] = $x)
В jq 1.5 или более поздней версии, если вы хотите только изменить отрицательное число на 0, вы должны написать:
.Sample[0].values[-1][-1] = 0
И т.д.