使用Circe将字段添加到json

时间:2018-12-08 10:47:45

标签: scala json-ld circe

我正在阅读circe文档,无法弄清楚如何处理以下内容。

我只想在主杰森对象中添加一个带有对象的字段。

{
  Fieldalreadythere: {}
  "Newfield" : {}
}

我只想在对象中添加新字段。为了提供一些背景信息,我正在处理Json-ld。我只想添加一个上下文对象。 @context:{} 参见下面的示例:

{
  "@context": {
    "@version": 1.1,
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "foaf": "http://xmlns.com/foaf/0.1/",
    "foaf:homepage": { "@type": "@id" },
    "picture": { "@id": "foaf:depiction", "@type": "@id" }
  },
  "@id": "http://me.markus-lanthaler.com/",
  "@type": "foaf:Person",
  "foaf:name": "Markus Lanthaler",
  "foaf:homepage": "http://www.markus-lanthaler.com/",
  "picture": "http://twitter.com/account/profile_image/markuslanthaler"
}

我想添加上下文对象,仅此而已。

我该怎么做?官方文档中的示例主要讨论修改值,但实际上没有添加字段等等。

2 个答案:

答案 0 :(得分:2)

看看JsonObject。有:+种方法可以满足您的需求。

这是一个简单的例子:

import io.circe.generic.auto._
import io.circe.parser
import io.circe.syntax._

object CirceAddFieldExample extends App {
    val jsonStr = """{
       Fieldalreadythere: {}
    }"""
    val json = parser.parse(jsonStr)
    val jsonObj = json match {
       case Right(value) => value.asObject
       case Left(error) => throw error
    }
    val jsonWithContextField = jsonObj.map(_.+:("@context", contextObj.asJson))
}

答案 1 :(得分:0)

您可以使用deepMerge方法将两个Json加在一起。

假定上下文类可以使用编码器:

val contextJson: Json = Map("@context", context).asJson
val result: Json = existingJson.deepMerge(contextJson)