Добавить строковый литерал в вывод JSONPath

#json #jsonpath

#json #jsonpath

Вопрос:

Могу ли я добавить строковый литерал в селектор JSONPath?

 { "items": [
    { "x": 1 },
    { "x": 2 },
    { "x": 3 },
    { "x": 4 }]
}
  

$.items[:].x выдает…

 [
  1,
  2,
  3,
  4
]
  

Например, могу ли я заставить его вернуться…

 [
  { 1 },
  { 2 },
  { 3 },
  { 4 }
]
  

Я хочу сгенерировать некоторый код, который добавляет элементы в словарь.

Комментарии:

1. {1} недопустимый JSON. Путь JSON может возвращать его результаты только как действительный JSON. Чего вы действительно хотите? Пожалуйста, уточните свой вопрос.

2. @gregsdennis Возвращает C #, недопустимый JSON.

3. Какую библиотеку вы используете? Этот вопрос действительно нуждается в дополнительной информации.

4. Я использовал это … jsonpath.com

5. Скорее всего, это невозможно, если вы не измените источник своей реализации пути JSON; уверен, что вы используете jsonpath-0.5.1.cs?

Ответ №1:

Как обсуждалось в комментариях, это невозможно сделать с помощью JSONPath (самостоятельно), поскольку запрос пути возвращает только допустимый JSON, а целевой формат недопустим. В общем, JSONPath здесь не подходит, преобразование JSON с использованием библиотеки, подобной Jolt, было бы более подходящим; но опять же, подобно преобразованиям XSLT, мы можем создавать только допустимый вывод. Итак, как вы уже выяснили, вам нужно будет использовать строковые функции для смешивания кода по мере необходимости. Например, замена регулярного выражения может сделать:

 const regex = /(d ),?/gm;
const str = `[
  1,
  2,
  3,
  4
]`;
const subst = `{ $1 },`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);