我正在尝试使用Jolt transformation转换一个JSON,在这里寻找一些输入。我试图通过属性的内部值进行过滤。
我的目标是得到一个数组,它只包含类型为“xx”的项目。但不是所有的项目对象,只有一些字段
{
"id": "11_1",
"action": "add",
"payment": {
"paied": true,
"coin": "dollar"
},
"type": {
"id": "11_1_xx",
"typeName": "xx"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
}
}
}
这是我的输入和预期输出:
输入:
{
"id": 11,
"item": [
{
"id": "11_1",
"action": "add",
"payment": {
"paied": true,
"coin": "dollar"
},
"type": {
"id": "11_1_xx",
"typeName": "xx",
"typeGroup": "xx",
"typeValue": "xx"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
},
"reason": {
"id": "123",
"name": "xx"
}
},
"item": [
{
"id": "11_1_1",
"action": "add",
"payment": {
"paied": true,
"coin": "dollar"
},
"type": {
"id": "11_1_1_zz",
"typeName": "zz",
"typeGroup": "zz",
"typeValue": "zz"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
},
"reason": {
"id": "123",
"name": "xx"
}
},
"item": [
{
"id": "11_1_1_1",
"action": "add",
"payment": {
"paied": true,
"coin": "NIS"
},
"type": {
"id": "11_1_1_1_xx",
"typeName": "xx",
"typeGroup": "xx",
"typeValue": "xx"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
},
"reason": {
"id": "123",
"name": "xx"
}
}
}
]
},
{
"id": "11_1_2",
"action": "add",
"payment": {
"paied": false,
"coin": "dollar"
},
"type": {
"id": "11_1_2_xx",
"typeName": "xx",
"typeGroup": "xx",
"typeValue": "xx"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
},
"reason": {
"id": "123",
"name": "xx"
}
},
"item": [
{
"id": "11_1_2_1",
"action": "add",
"payment": {
"paied": false,
"coin": "NIS"
},
"type": {
"id": "11_1_2_1_zz",
"typeName": "zz",
"typeGroup": "zz",
"typeValue": "zz"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
},
"reason": {
"id": "123",
"name": "xx"
}
}
}
]
}
]
}
]
}
预期产出:
json prettyprint-override">[
{
"id": "11_1",
"action": "add",
"payment": {
"paied": true,
"coin": "dollar"
},
"type": {
"id": "11_1_xx",
"typeName": "xx"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
}
}
},
{
"id": "11_1_1_1",
"action": "add",
"payment": {
"paied": true,
"coin": "NIS"
},
"type": {
"id": "11_1_1_1_xx",
"typeName": "xx"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
}
}
},
{
"id": "11_1_2",
"action": "add",
"payment": {
"paied": false,
"coin": "dollar"
},
"type": {
"id": "11_1_2_xx",
"typeName": "xx"
},
"details": {
"place": {
"id": "123",
"name": "xx"
},
"status": {
"id": "123",
"name": "xx"
}
}
}
]
你能帮我写一个简单的规范吗?
您可以尝试库Josson。函数map()
构建一个新的ObjectNode。函数field()
修改当前的ObjectNode,可用于删除字段。转换语句简短易懂。
https://github.com/octomix/josson
Josson josson = Josson.fromJsonString(inputJSON);
JsonNode node = josson.getNode(
"cumulateCollect(" +
" [type.typeName='xx']" + // filter
" .field(type.map(id, typeName)" + // need "type.id" and "type.typeName"
" ,details.field(reason:)" + // remove "details.reason"
" ,item:)" + // remove "item"
" ,item)"); // next round
System.out.println(node.toPrettyString());
您可以使用以下解释规范
[
{
// Determine all key-value pairs partitioned under the main value and type.typeValue combinations
"operation": "shift",
"spec": {
"item": {
"*": {
"item": {
"*": {
"item": {
"*": {
"type": {
"@(1,id)": "@(2,id).@(1,typeName).id", //traverse } character twice in order to reach the main id of the object
"@(1,action)": "@(2,id).@(1,typeName).action",
"*": "@(2,id).@(1,typeName).&1.&" // &1 replicates "type" key, & does the leaf value
},
"*": "@(1,id).@(1,type.typeName).&"
}
},
"type": {
"@(1,id)": "@(2,id).@(1,typeName).id",
"@(1,action)": "@(2,id).@(1,typeName).action",
"*": "@(2,id).@(1,typeName).&1.&"
},
"*": "@(1,id).@(1,type.typeName).&"
}
},
"type": {
"@(1,id)": "@(2,id).@(1,typeName).id",
"@(1,action)": "@(2,id).@(1,typeName).action",
"*": "@(2,id).@(1,typeName).&1.&"
},
"*": "@(1,id).@(1,type.typeName).&"
}
}
}
},
{
// Filter out by the desired value(in this case it's "xx")
"operation": "shift",
"spec": {
"*": {
"xx": ""
}
}
},
{
// Get rid of same repeating components of id and action arrays
"operation": "cardinality",
"spec": {
"*": {
"id": "ONE",
"action": "ONE"
}
}
},
{
// Get rid of undesired attributes
"operation": "remove",
"spec": {
"*": {
"type": {
"typeGroup": "",
"typeValue": ""
},
"det*": {
"reason": ""
}
}
}
}
]
我正在尝试使用Jolt transformation转换一个JSON,在这里寻找一些输入。我试图通过属性的内部值进行过滤。 我的目标是获得一个只包含类型名为' xx '的项目的数组。 这是我的输入和预期输出: 输入: 预期产出: 你能帮我写一个简单的规范吗?
我正在尝试使用Jolt transformation转换一个JSON,在这里寻找一些输入。我正在尝试根据属性值进行过滤。 我的目标是获得一个数组,其中只包含动作为“remove”的项目。 这是我的输入和预期输出: 输入: 预期产出: 你能帮我写一个简单的规范吗?
我正在尝试使用 Jolt 转换来转换 Json,在这里寻找一些输入。我正在尝试过滤一个键,该键是另一个属性的值。这是我的输入和预期输出 我看到的输出是 我试过的规格是 但是我没有得到预期的输出。我也尝试了一些其他组合,但未能获得正确的输出。有人能帮忙吗?
我需要使用JOLT将下面的输入JSON转换成下面列出的格式。链接是通过第一个数组元素的deps.name与第二个数组元素的spec.name来完成的。我对链接一无所知。谢谢你的帮助。 输入json 预期的输出格式
我想使用JOLT转换做两件事: 过滤名为 myArray 的数组中的元素,以便仅保留具有“v_518”属性的元素 过滤掉除“v_518”和“LFDN”之外的其余元素的所有属性 输入: 期望输出: 到目前为止,我尝试了什么,但没有按预期工作: 我尝试使用http://jolt-demo.appspot.com/#andrewkcarter2中的示例,但我不知道如何做到这一点。
问题内容: 这是一个不起作用的简单go程序: 错误: prog.go:18:无效的操作:v [属性](*顶点类型的索引) 我想要的是使用名称访问Vertex X属性。如果我这样做,它会起作用,但不会。 有人可以告诉我如何进行这项工作吗? 问题答案: 大多数代码都不需要这种动态查找。与直接访问相比,它效率低下(编译器知道Vertex结构中X字段的偏移量,可以将vX编译为单个机器指令,而动态查找则需要