이전 버전과의 호환성을 위해 API에서 JSON 응답을 변환하는 라이브러리를 작성 중입니다. 그리고 내가해야 할 일은 임의의 JSON을 가져 와서 특정 필드 이름을 변경하는 것입니다. 나는 scala와 argonaut를 사용하고 있습니다. 그러나 FIELD 이름을 변경하는 문서 나 예제에서는 값이 보이지 않습니다.argonaut에서 JSON 필드 이름 변환하기
3
A
답변
0
변환하고지도에 추가 한 다음 새 json 객체를 만드는 데 필요한 객체를 접는 작업이 끝났습니다.
val conversionMap = Map("a" -> "b")
Json(
j.objectOrEmpty.toMap.foldLeft(Map.empty[JsonField, Json]) {
case (acc, (key, value)) =>
acc.updated(conversionMap.getOrElse(key, key), j.fieldOrNull(key))
}.toSeq: _*
)
1
내가이 일을 특별히 좋은 방법을 알고하지 않습니다하지만 withObject
으로 커서에서 그 객체의 필드를 교체 한 후 사용 도우미 쓰기 너무 끔찍 아니다 :
def renameField(before: JsonField, after: JsonField)(obj: JsonObject) =
obj(before).map(v => (obj - before) + (after, v)).getOrElse(obj)
Parse.parseOption("""{ "a": { "b": { "c": 1 } } }""").flatMap { json =>
(json.hcursor --\ "a").withFocus(_.withObject(renameField("b", "z"))).undo
}
을
예상대로 Some({"a":{"z":{"c":1}}})
을 반환합니다.
내가 올바르게 읽는다면 사전에 JSOn의 구조를 알아야 할 필요가 있습니다. 꼭 그렇지는 않습니다. 나는 "a"라는 이름의 필드의 이름을 "b"(대략)로 바꾸려고합니다. 나는 해결책을 찾았지만 똑같이 좋지 않다. – Falmarri