使用杰克逊更新 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 字符串。