[SCALA] 프레임 워크를 재생 - JSON 객체에 필드를 추가
SCALA프레임 워크를 재생 - JSON 객체에 필드를 추가
나는 스칼라를 사용하여 플레이 프레임 워크에 JSON 객체에 필드를 추가에 문제가 :
나는 데이터를 포함하는 경우 클래스가 있습니다. 예를 들면 :
case class ClassA(a:Int,b:Int)
내가 JSON의 쓰기를 사용하여 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})
어떤 도움에 감사드립니다!
해결법
-
==============================
1.JSObject를 사용하면 객체에 필드를 추가 할 수있는 + 방법이 있지만, 불행히도 된 JSONObject는 정적 JsValue 아닌의 JSObject으로 입력됩니다. 당신은 몇 가지 방법이 주위를 얻을 수 있습니다. 첫 번째로 사용하는 것입니다 :
JSObject를 사용하면 객체에 필드를 추가 할 수있는 + 방법이 있지만, 불행히도 된 JSONObject는 정적 JsValue 아닌의 JSObject으로 입력됩니다. 당신은 몇 가지 방법이 주위를 얻을 수 있습니다. 첫 번째로 사용하는 것입니다 :
scala> jsonObject.as[JsObject] + ("c" -> Json.toJson(3)) res0: play.api.libs.json.JsObject = {"a":1,"b":2,"c":3}
당신은 본질적으로 downcasting - 멋져요가있는 것처럼 컴파일러를 이야기로, "당신은 단지, 그것도의 JSObject의 날이이 JsValue 것을 알고 있지만 생각". 이것은이 경우에는 안전하지만, 그것은 좋은 생각이 아니다. 더 원칙적인 접근 방식은 직접 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 객체는 필요하지 않을 것입니다 OWrites 인스턴스이 지나치게 명시 적 접근 방식을 필요로하는 toJsonObject 방법이있을 것이다.
-
==============================
2.나는 해결책을 찾아 냈다. 사실 Json.toJson의 리턴 타입이 이러한 방법이 없다이다 JsValue,하지만의 JSObject (http://www.playframework.com/documentation/2.2.x/api/scala/index.html#play.api 이 솔루션은 그래서 .libs.json.JsObject)는 않습니다 :
나는 해결책을 찾아 냈다. 사실 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))
나는 누군가가이 유용 바랍니다 :)
-
==============================
3.간단한 방법이 사용 argoanut이다 (http://argonaut.io/)
간단한 방법이 사용 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 객체를 생성 상기 개체에 의해 생성 된 obj1.asJson JSON에 추가 될 것이다 obj2보다
from https://stackoverflow.com/questions/22855710/play-framework-add-a-field-to-json-object by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라의 존재 유형의 예에 의한 자바의 와일드 카드의 차이? (0) | 2019.11.28 |
---|---|
[SCALA] 스칼라 : 방법 \ 연산자 오버로딩 (0) | 2019.11.28 |
[SCALA] 무엇을 Predef.locally 수행 방법 Predef.identity에서 그 차이가 않습니다 (0) | 2019.11.27 |
[SCALA] 스칼라 컬렉션을 변경할 수 대에 불변 (0) | 2019.11.27 |
[SCALA] Kryo 스파크 : 사용자 정의 시리얼 등록 (0) | 2019.11.27 |