簡體   English   中英

在argonaut中轉換JSON字段名稱

[英]Converting JSON field names in argonaut

我正在編寫一個庫來轉換來自API的JSON響應,以實現向后兼容性。 我需要做的是接受任意JSON,並更改某些字段名稱。 我正在使用scala和argonaut,但我沒有看到更改FIELD名稱的文檔或示例中的任何方法,只有值。

我不知道有什么特別好的方法可以做到這一點,但編寫一個幫助器來替換對象中的字段然后在帶有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對象。

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: _*
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM