问题描述
问题/问题
如何使用Jolt将数组插入数组中的特定对象?
输入
特定对象需要获取它们的可选属性,具体取决于它们在数组中的特定位置,即秒([1]
)。这些可选属性将在jolt转换中添加。
{
"array" : [
{
"key" : "a key","value" : "a value"
},{
"key" : "another key","value" : "another value"
}
]
}
预期
{
"array" : [
{
"key" : "a key","value" : "another value","values": ["extra value1","extra value2"]
}
]
}
尝试了什么
我尝试过default
,modify-default-beta
和modify-overwrite-beta
,但似乎都没有我认为的那样。
默认
似乎默认值会忽略数组引用"[1]"
,因此尝试了似乎支持此操作的beta操作。
默认规格
[
{
"operation": "default","spec": {
"array": {
"[1]": {
"values": ["extra value1","extra value2"]
}
}
}
}
]
默认实际
{
"array" : [ {
"key" : "a key","value" : "a value"
},{
"key" : "another key","value" : "another value"
} ]
}
modify-default-beta
解析数组引用"[1]"
,但仅应用规范中数组的第一个元素,而不是整个数组
修改默认beta版本
[
{
"operation": "modify-default-beta","extra value2"]
}
}
}
}
]
修改默认默认Beta版本
{
"array" : [ {
"key" : "a key","values" : "extra value1" // array is dumped
} ]
}
modify-overwrite-beta
尝试过modify-overwrite-beta
,我得到的行为与modify-default-beta
相同。
修改覆盖测试版规范
[
{
"operation": "modify-overwrite-beta","extra value2"]
}
}
}
}
]
modify-overwrite-beta实际
{
"array" : [ {
"key" : "a key","values" : "extra value1" // array is dumped
} ]
}
有趣的旁注
在输入中没有数组引用,这是一个相当简单的问题,当存在数组引用和*-beta
操作时,似乎行为与我所期望的不一样。
简单的默认值
我从输入中删除了数组
简单的默认输入
{
"element1": {
"key": "a key","value": "a value"
},"element2": {
"key": "a key","value": "another value"
}
}
简单的默认规范
[
{
"operation": "default","spec": {
"element2": {
"values": ["extra value1","extra value2"]
}
}
}
]
简单的默认实际值
{
"element1" : {
"key" : "a key","element2" : {
"key" : "another key","values" : [ "extra value1","extra value2" ]
}
}
解决方法
这似乎是我对规范用法的误解。
您似乎没有插入数组,而是要插入的每个元素。
[
{
"operation": "modify-default-beta","spec": {
"array": {
"[1]": {
"values": {
"[0]": "extra value1","[1]": "extra value2"
}
}
}
}
}
]
上面的规范将两个值都插入values属性,特别是元素"[0]"
和元素"[1]"
中。
这也可以与modify-overwrite-beta
操作一起使用
[
{
"operation": "modify-overwrite-beta","[1]": "extra value2"
}
}
}
}
}
]
这两个规范的结果如下:
{
"array" : [ {
"key" : "a key","value" : "a value"
},{
"key" : "another key","value" : "another value","values" : [ "extra value1","extra value2" ]
} ]
}