如何仅使用 jsonpath 将数组转换为子集?
How to transform an array into a subset using only jsonpath?
我想使用 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" }]
但我真正需要的是没有第一个索引的上述对象(所以只有数组中的最后两个对象)。
您可以使用 @path syntax 忽略第一项:
var _template = {
foo: ['$.myArray[?(@path !== "$[\'myArray\'][0]")]']
};
Returns:
{ foo: [ { item: 2, value: 'second' }, { item: 3, value: 'third' } ] }
但是,jsonpath-object transform 目前似乎不支持混合使用 @path
和访问 {["$.data", {"key": "$.value"}]}
中的子字段。
因此,您有以下选择:
- 您可以通过使用两个转换操作来实现您的需要:第一个删除第一个项目,第二个重命名子字段。
slice
-按照您的建议预先处理您的对象。
- 最后,修补库(并在您使用时提交拉取请求!)。无论如何,这可能是一个快速修复,应该不会太费时。
我想使用 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" }]
但我真正需要的是没有第一个索引的上述对象(所以只有数组中的最后两个对象)。
您可以使用 @path syntax 忽略第一项:
var _template = {
foo: ['$.myArray[?(@path !== "$[\'myArray\'][0]")]']
};
Returns:
{ foo: [ { item: 2, value: 'second' }, { item: 3, value: 'third' } ] }
但是,jsonpath-object transform 目前似乎不支持混合使用 @path
和访问 {["$.data", {"key": "$.value"}]}
中的子字段。
因此,您有以下选择:
- 您可以通过使用两个转换操作来实现您的需要:第一个删除第一个项目,第二个重命名子字段。
slice
-按照您的建议预先处理您的对象。- 最后,修补库(并在您使用时提交拉取请求!)。无论如何,这可能是一个快速修复,应该不会太费时。