Требования:
Я хочу применить некоторые функции к внутренним значениям JsonNode
.Функции могут быть разными, например: - lowercasing
некоторые значения или добавление чего-либо к значениям или замена значений чем-либо.Как мне добиться этого с помощью библиотеки Jackson
?Обратите внимание, что структура данных JSON может отличаться, что означает, что я хочу построить общую систему, которая будет принимать некоторое выражение пути, которое в основном решит, где изменить.Я хочу использовать стиль функционального программирования, чтобы передать эти функции в качестве аргументов.
Например:
input:
{
"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()
.Я хочу применить функцию lowercase()
ко всем атрибутам "name"
внутри всех "addresses"
каждого "value"
.То же самое касается convert_to_number()
, но для всех атрибутов "dist"
.
Таким образом, в основном выражения JSON
будут примерно такими, как показано ниже для функций:
lowercase() : /values/*/addresses/*/name
convert_to_number() : /values/*/addresses/*/dist
output:
{
"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 )