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

时间:2018-10-06 14:07:20

标签: scala circe

我有一个JSON字符串,如下所示:

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

我想使用 circe Nissan 和 Ford )。 >在scala。
我该怎么办?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用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 字段,“关注”该字段,并传递用于修改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
      }
    ]
  }
})