【发布时间】:2019-04-07 14:49:11
【问题描述】:
要求:
我想对JsonNode 的内部值应用一些函数。功能可以不同,例如:-lowercasing 某些值或将某些内容附加到值或用某些内容替换值。如何使用Jackson 库来实现这一点?请注意,JSON 数据的结构可能不同,这意味着我想构建一个通用系统,该系统将接受一些路径表达式,该路径表达式基本上将决定在哪里进行更改。我想使用函数式编程风格,这样我就可以将这些函数作为参数传递。
例如:
输入:
{
"name": "xyz",
"values": [
{
"id": "xyz1",
"sal": "1234",
"addresses": [
{
"id": "add1",
"name": "ABCD",
"dist": "123"
},
{
"id": "add2",
"name": "abcd3",
"dist": "345"
}
]
},
{
"id": "xyz2",
"sal": "3456",
"addresses": [
{
"id": "add1",
"name": "abcd",
"dist": "123"
},
{
"id": "add2",
"name": "XXXXX",
"dist": "345"
}
]
}
]
}
在这种情况下,我基本上需要两个函数,lowercase() 和 convert_to_number()。我想在每个"value" 的所有"addresses" 内的所有"name" 属性上应用lowercase() 函数。
convert_to_number() 也是如此,但对于所有 "dist" 属性。
所以,基本上JSON 表达式将类似于下面的函数:
lowercase() : /values/*/addresses/*/name
convert_to_number() : /values/*/addresses/*/dist
输出:
{
"name": "xyz",
"values": [
{
"id": "xyz1",
"sal": "1234",
"addresses": [
{
"id": "add1",
"name": "abcd",
"dist": 123
},
{
"id": "add2",
"name": "abcd3",
"dist": 345
}
]
},
{
"id": "xyz2",
"sal": "3456",
"addresses": [
{
"id": "add1",
"name": "abcd",
"dist": 123
},
{
"id": "add2",
"name": "xxxx",
"dist": 345
}
]
}
]
}
客户端代码:
JsonNode jsonNode = ...
applyFunctionsRecursivelyBasedOnExpr(JsonNode jsonNode, String expr, Function )
【问题讨论】:
-
输出 dist 仍然是字符串...
-
更新了代码。
-
您的问题解决了吗?以下答案有用吗?
标签: java json jackson jsonpath jackson-databind