使用杰克逊更新 scala 中的 json 字符串
update json string in scala using jackson
我有一个json
val nodeJson =
s"""
{
"NAME":"node1",
"CONFIG":{
"colMap": {
"idcols": [
],
"emailcols":[
]
},
"col.partitions": "3"
}
}
"""
我必须从 scala 数组动态填充“idcols”和“emailcols”数组。
就像我有数组一样:
val idcols = Array("per_id","dep_id")
val emailcols = Array("per_email","dep_email")
那么这些值需要在json字符串中设置
我必须使用 com.fasterxml.jackson
库。
我能够得到数组:
val obj = new ObjectMapper()
val root = obj.readTree(nodeJson)
val value = root.get("CONFIG").get("colMap")
println(value)
但我不确定如何更新它并将其设置回 json。 Kinldy 让我知道如何更新 json 字符串。
当你使用 jackson 时,你的大多数修改器都没有在 JsonNode
上定义,而是定义在特定的 sub-classes 上(在你的例子中,ArrayNode
代表 json 数组)
例如,要将字符串添加到 idCols
数组,您将:
root.get("CONFIG").get("colMap").get("idCols").asInstanceOf[ArrayNode].add("someArbitraryString")
如果您更喜欢类型安全(以分配额外案例 class 的性能成本),您还可以考虑创建一个案例 class 匹配您的文档结构,解析 json 到那个,更新 scala 案例 class 并序列化回 json 字符串。
我有一个json
val nodeJson =
s"""
{
"NAME":"node1",
"CONFIG":{
"colMap": {
"idcols": [
],
"emailcols":[
]
},
"col.partitions": "3"
}
}
"""
我必须从 scala 数组动态填充“idcols”和“emailcols”数组。
就像我有数组一样:
val idcols = Array("per_id","dep_id")
val emailcols = Array("per_email","dep_email")
那么这些值需要在json字符串中设置
我必须使用 com.fasterxml.jackson
库。
我能够得到数组:
val obj = new ObjectMapper()
val root = obj.readTree(nodeJson)
val value = root.get("CONFIG").get("colMap")
println(value)
但我不确定如何更新它并将其设置回 json。 Kinldy 让我知道如何更新 json 字符串。
当你使用 jackson 时,你的大多数修改器都没有在 JsonNode
上定义,而是定义在特定的 sub-classes 上(在你的例子中,ArrayNode
代表 json 数组)
例如,要将字符串添加到 idCols
数组,您将:
root.get("CONFIG").get("colMap").get("idCols").asInstanceOf[ArrayNode].add("someArbitraryString")
如果您更喜欢类型安全(以分配额外案例 class 的性能成本),您还可以考虑创建一个案例 class 匹配您的文档结构,解析 json 到那个,更新 scala 案例 class 并序列化回 json 字符串。