2015-06-03 3 views
0

Я хотел бы использовать jsonpath, чтобы преобразовать массив с 3 элементами только в 2 элемента.Как преобразовать массив в подмножество, используя только jsonpath?

Учитывая этот объект:

var _base = { 
    myArray: [{ item: 1, value: "first" }, { item: 2, value: "second" }, { item: 3, value: "third" }] 
} 

Я хотел бы использовать jsonpath-object transform преобразовать объект в:

var _newBase = { 
    myArray: [{ newItem: 2, newValue: "second" }, { newItem: 3, newValue: "third" }] 
} 

Я понимаю, что я мог сделать это с помощью простого slice вызова и некоторые манипуляции объекта , но у меня есть сложные переменные объекты, которые я преобразовываю во время выполнения, поэтому требуется jsonpath.

Я могу использовать ниже:

var transform = require('jsonpath-object-transform'); 
var template = { ["$.myArray", { "newItem": "$..item", "newValue": "$..value" }] } 
transform(_base, _template) //emits the below 

который излучает:

[{ newItem: 1, newValue: "one" }, { newItem: 2, newValue: "second" }, { newItem: 3, newValue: "third" }] 

Но что мне действительно нужно, это выше объекта без его первого индекса (так только последние два объекта в массиве).

ответ

1

Вы можете использовать @path syntax игнорировать первый пункт:

var _template = { 
    foo: ['$.myArray[?(@path !== "$[\'myArray\'][0]")]'] 
}; 

возвращения:

{ foo: [ { item: 2, value: 'second' }, { item: 3, value: 'third' } ] } 

Однако, кажется, что jsonpath-object transform в настоящее время не поддерживает смешивание как @path и доступ к подполею, как в {["$.data", {"key": "$.value"}]}. Так что это оставляет вас со следующими параметрами:

  • Вы можете получения идеальной, что вам нужно, используя два преобразования операции: первый чернослив из первого пункта, а второй переименовать подполей.
  • slice -в ваших объектах заранее, как вы и предполагали.
  • И, наконец, исправление библиотеки (и отправка запроса на растяжение, пока вы на нем!). Это, вероятно, быстрое решение, не должно быть слишком трудоемким.

 Смежные вопросы

  • Нет связанных вопросов^_^