我想使用jsonpath
将包含3个元素的数组转换为2个元素。
鉴于此对象:
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" }]
但我真正需要的是没有第一个索引的上述对象(所以只是数组中的最后两个对象)。
答案 0 :(得分: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
- 按照您的建议事先预先设置对象。