【发布时间】:2021-06-24 06:27:51
【问题描述】:
TLDR:
我想更新 JsonNode 键 dependsOn 的某个值并将结果作为 JsonNode 返回。目前我正在将值转换为String,对字符进行切片,然后使用ObjectMapper 将字符串转换回JsonNode
我有一个如下所示的 json 对象
{
"name": "somename",
"type": "sometype",
"description": "some desc",
"properties": {
"path": "some path",
"dependsOn": [
"ABC:zzz","DEF:sdc","GHI:ere"
],
"checkpoint": "some checkpoint",
"format": "some format",
"output": "some output",
"table": "some table"
}
}
我目前正在解析上述 json 数据并将dependsOn 作为 JsonNode 元素获取(如下所示)
JsonNode components = model.get("properties");
JsonNode dependsOn = components.get("dependsOn");
当我打印dependsOn 时,它看起来像这样"["ABC:zzz","DEF:sdc","GHI:ere"]"
我的要求是strip : 之后的所有内容来自 dependsOn 数组
以下代码帮助我将 JsonNode 转换为 String,然后剥离 :whatever,然后将其转换回 JsonNode
if (dependsOn != null && !dependsOn.isEmpty()) {
String dependsOnString =
components
.get("dependsOn")
.get(0)
.textValue()
.substring(
0,
(components.get("dependsOn").get(0).textValue().lastIndexOf(":") != -1)
? components.get("dependsOn").get(0).textValue().lastIndexOf(":")
: components.get("dependsOn").get(0).textValue().length());
ObjectMapper mapper = new ObjectMapper();
dependsOn = mapper.readTree("[\"" + dependsOnString + "\"]");
}
输入:
"["ABC:zzz","DEF:sdc","GHI:ere"]"
输出
"["ABC","DEF:sdc","GHI:ere"]"
上面的代码只去除了数组的第一个元素,我可以循环并为其余元素执行相同的操作。但我有几个关于我想做的事情的问题
首先,我这样做是正确的还是有更简单的 技术做到这一点?而不是将其转换为字符串,然后 再次到 JsonNode..
接下来,我只对
first element of the array做了这个 我想循环并为all the elements of the array执行此操作。有没有比使用 for/while 循环更简单的解决方案?
【问题讨论】: