Play Framework - JSON 개체에 필드 추가
Scala를 사용하여 Play Framework의 Json 개체에 필드를 추가하는 데 문제가 있습니다.
데이터를 포함하는 사례 클래스가 있습니다.예를 들어 다음과 같습니다.
case class ClassA(a:Int,b:Int)
Json Writes를 사용하여 Json 개체를 만들 수 있습니다.
val classAObject = ClassA(1,2)
implicit val classAWrites= Json.writes[ClassA]
val jsonObject = Json.toJson(classAObject)
Json은 다음과 같이 됩니다.
{ a:1, b:2 }
Json 개체에 'c' 필드를 추가한다고 가정합니다.결과:
{ a:1, b:2, c:3 }
새로운 케이스 클래스를 만들거나 Json.obj를 사용하여 직접 Json 개체를 만들지 않고 어떻게 하면 됩니까?다음과 같은 것을 찾고 있습니다.
jsonObject.merge({c:3})
아무쪼록 잘 부탁드립니다!
JsObject
가 있다+
오브젝트에 필드를 추가할 수 있는 메서드입니다만, 유감스럽게도jsonObject
스태틱하게 입력됩니다.JsValue
, 가 아닙니다.JsObject
몇 가지 방법으로 이 문제를 해결할 수 있습니다.첫 번째 방법은as
:
scala> jsonObject.as[JsObject] + ("c" -> Json.toJson(3))
res0: play.api.libs.json.JsObject = {"a":1,"b":2,"c":3}
와 함께as
당신은 기본적으로 다운캐스팅을 하고 있습니다.컴파일러에게 이렇게 말하는 겁니다.JsValue
하지만 날 믿어, 이건 또한JsObject
이 경우 안전하지만 좋은 생각은 아닙니다.보다 원칙적인 접근법은,OWrites
직접:
scala> val jsonObject = classAWrites.writes(classAObject)
jsonObject: play.api.libs.json.JsObject = {"a":1,"b":2}
scala> jsonObject + ("c" -> Json.toJson(3))
res1: play.api.libs.json.JsObject = {"a":1,"b":2,"c":3}
어쩌면 언젠가는Json
오브젝트는toJsonObject
필요한 방법OWrites
인스턴스(instance)와 이 지나치게 명확한 접근 방식은 필요하지 않습니다.
나 스스로 해결책을 찾았다.실제로 Json.toJson의 반환 유형인 JsValue에는 이러한 메서드가 없지만 JsObject(http://www.playframework.com/documentation/2.2.x/api/scala/index.html#play.api.libs.json.JsObject)에는 있기 때문에 솔루션은 다음과 같습니다.
val jsonObject = Json.toJson(classAObject).as[JsObject]
jsonObject + ("c", JsNumber(3))
누군가가 이것을 유용하게 생각해 주었으면 한다:)
간단한 방법은 argoanut(http://argonaut.io/)을 사용하는 것입니다.
var jField : Json.JsonField = "myfield" //Json.JsonField is of type String
obj1.asJson.->:(jField, obj2.asJson) // adds a field to obj1.asJson
여기서obj1.asJson
JSON 오브젝트를 만들고obj2
에 의해 생성되는 json에 추가하는 오브젝트입니다.obj1.asJson
언급URL : https://stackoverflow.com/questions/22855710/play-framework-add-a-field-to-json-object
'prosource' 카테고리의 다른 글
jQuery AJAX GET 호출에서 요청 헤더 전달 (0) | 2023.02.22 |
---|---|
비ASC 검색 및 삭제Oracle Varchar2의 II 문자 (0) | 2023.02.22 |
서비스에 주석을 달아 @Retention, @Transactional, @Inherited로 테스트한 후 테스트 NG 유닛 테스트가 작동하지 않음 (0) | 2023.02.22 |
React의 .js, .tsx 및 .jsx의 차이점은 무엇입니까? (0) | 2023.02.22 |
몽구스에서 생몽고드비 수술은 어떻게 하나요? (0) | 2023.02.22 |