使用 circe 和 scala 将元素添加到 JSON 数组

Adding elements to JSON array using circe and scala

我有一个 JSON 字符串如下:

{
"cars": {
    "Nissan": [
        {"model":"Sentra", "doors":4},
        {"model":"Maxima", "doors":4},
        {"model":"Skyline", "doors":2}
    ],
    "Ford": [
        {"model":"Taurus", "doors":4},
        {"model":"Escort", "doors":4}
    ]
}
}

我想添加一个新的汽车品牌(除了 NissanFord),使用 circe 在 scala.
我该怎么做?

提前致谢。

您可以使用 cursors 修改 JSON。可能的解决方案之一:

import io.circe._, io.circe.parser._

val cars: String = """
{
  "cars": {
    "Nissan": [
      {"model":"Sentra", "doors":4},
        {"model":"Maxima", "doors":4},
        {"model":"Skyline", "doors":2}
     ],
    "Ford": [
      {"model":"Taurus", "doors":4},
      {"model":"Escort", "doors":4}
    ]
  }
}"""

val carsJson = parse(cars).getOrElse(Json.Null)
val teslaJson: Json = parse("""
    {
      "Tesla": [
        {"model":"Model X", "doors":5}
      ]
    }""").getOrElse(Json.Null)

val carsCursor = carsJson.hcursor
val newJson = carsCursor.downField("cars").withFocus(_.deepMerge(teslaJson)).top

这里我们直接下到cars字段,在上面"focus",传递修改JSON值的函数。这里使用deepMerge

newJson 将如下所示:

Some({
  "cars" : {
    "Tesla" : [
      {
        "model" : "Model X",
        "doors" : 5
      }
    ],
    "Nissan" : [
      {
        "model" : "Sentra",
        "doors" : 4
      },
      {
        "model" : "Maxima",
        "doors" : 4
      },
      {
        "model" : "Skyline",
        "doors" : 2
      }
    ],
    "Ford" : [
      {
        "model" : "Taurus",
        "doors" : 4
      },
      {
        "model" : "Escort",
        "doors" : 4
      }
    ]
  }
})