Как «нумеровать» элементы массива?

С учетом ввода:

[
  {
    "a": 1
  },
  {
    "a": 2
  },
  {
    "a": 7
  }
]

как добавить новое поле к каждому объекту, значение которого будет индексом в массиве? Производство:

[
  {
    "a": 1,
    "index": 0
  },
  {
    "a": 2,
    "index": 1
  },
  {
    "a": 7,
    "index": 2
  }
]

На этот вопрос есть другие ответы на stackoverflow.com/questions/24528256/…

peak 21.12.2020 18:01

извините, я не нашел этот ответ.

Martin Mucha 21.12.2020 19:12
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
2
2
223
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Try : Array[index_of_object].property = value
for example : array[0].a = 1

извините, я не думаю, что это сработает, это делает что-то совершенно другое IIUC.

Martin Mucha 21.12.2020 12:45

Используя reduce, без разборки/пересборки ввода:

reduce range(length) as $index (.; .[$index] += {$index})

Online demo

Ответ принят как подходящий

Сохраните структуру в переменной, затем используйте keys, чтобы получить индексы, извлеките соответствующий объект из переменной с помощью индекса и добавьте к нему индекс:

jq '[ . as $d | keys[] | $d[.] + {index:.} ]' file.json
keys требует построения массива, поэтому использование range(0;length) здесь было бы более эффективным и потенциально гораздо более эффективным.
peak 21.12.2020 21:59

to_entries принимает объект и возвращает массив пар ключ/значение. Его можно использовать эффективно и интуитивно.

входной файл

// file.json
[
    {
      "a": 1
    },
    {
      "a": 2
    },
    {
      "a": 7
    }
]

команды

jq 'to_entries | map(.value+{index:.key})' file.json

Результаты

[
  {
    "a": 1,
    "index": 0
  },
  {
    "a": 2,
    "index": 1
  },
  {
    "a": 7,
    "index": 2
  }
]

Вот также альтернативное (не jq) решение с использованием jtc:

bash $ <input.json jtc -w'[:]<I>k' -i'{"index":{I}}'
[
   {
      "a": 1,
      "index": 0
   },
   {
      "a": 2,
      "index": 1
   },
   {
      "a": 7,
      "index": 2
   }
]
bash $ 

PS. Я разработчик jtc - процессора unix JSON
ППС. Отказ от ответственности требуется SO.

Другие вопросы по теме