Преобразование JDT для изменения N-го элемента массива

Я пытаюсь применить преобразование JDT к документу JSON, чтобы изменить свойство в N-м элементе массива. Возможно ли это без замены всего элемента или даже всего массива?

{
  "array": [
    {
      name: "A",
      value: 0
    },
    {
      name: "B",
      value: 3.14
    }
  ]
}

Есть ли преобразование, которое приводит меня к следующему? Я хочу изменить второй элемент массива и только его свойство «значение». Я не хочу искать его по «имени», а хочу получить доступ по индексу.

{
  "array": [
    {
      name: "A",
      value: 0
    },
    {
      name: "B",
      value: 12345678
    }
  ]
}

person wpfwannabe    schedule 13.05.2020    source источник
comment
Вы уже нашли какое-нибудь решение? Или хотя бы подтверждение того, что это в принципе может сработать?   -  person B--rian    schedule 27.05.2020
comment
Нет. Я бы разместил это здесь.   -  person wpfwannabe    schedule 27.05.2020


Ответы (1)


Соревнование

С некоторыми библиотеками в JSON легко выполнить преобразование. Если ваш объект называется foo, вы в основном хотите что-то вроде foo.array[1].value = "12345678" без какого-либо цикла.

Путь JDT

Я нашел Как использовать SlowCheetah для преобразования элементов массива в файле конфигурации Json? который спрашивает

Например, если в моем базовом файле конфигурации есть этот параметр:

{
  "Settings" :  [1, 2, 3] 
}

и я хочу передать его на:

{
  "Settings" :  [4, 5, 6] 
}

Решение Коллина К было

{
  "@jdt.replace": {
    "@jdt.path": "$.Settings",
    "@jdt.value": [4,5,6]
  }
}

Похоже, вам нужно заменить весь массив.

Копая дальше, позвольте мне перейти к открытой проблеме JDT, которая, кажется, подтверждает это предположение.

Отказ от ответственности

Я сам не использовал JDT, но я боролся с вложенными JSON различных типов, например. с помощью эластичного поиска.

Дополнительные ссылки

person B--rian    schedule 19.05.2020
comment
Спасибо. К сожалению, это не то, что мне нужно. Я думаю, что проблема описана ясно. В вашем примере я хочу заменить элемент 3, например. 6 (не весь массив). - person wpfwannabe; 19.05.2020
comment
Что-то совершенно не связанное с этим: какую клавиатуру показывает ваш аватар? - person B--rian; 19.05.2020
comment
Ха-ха. Интересный вопрос. Это ZX Spectrum 48K. Нужно быть очень старым, чтобы знать это. К сожалению, ваш обширный ответ не решает проблему для меня. - person wpfwannabe; 19.05.2020
comment
Np и спасибо. Мой первый компьютер был C64... Но правильно ли я понял вопрос? - person B--rian; 19.05.2020