Добавление поля в JSON с помощью Circe
Я иду через документацию Circe и не могу понять, как справиться со следующим.
Я просто хотел бы добавить поле с объектом в указанном главном объекте jason.
{
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"
}
Я хотел бы добавить объект контекста, вот и все.
Как я могу сделать это с Circe. Пример в официальной документации в основном говорит об изменении значения, но не о том, чтобы добавить поле и так далее.
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))
}
Вы можете использовать deepMerge
способ добавить два Json
все вместе.
Предполагая, что кодер доступен для вашего класса контекста:
val contextJson: Json = Map("@context", context).asJson
val result: Json = existingJson.deepMerge(contextJson)