首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在argonaut中转换JSON字段名

在argonaut中转换JSON字段名
EN

Stack Overflow用户
提问于 2014-01-21 17:14:13
回答 2查看 1.2K关注 0票数 4

出于向后兼容性的原因,我正在编写一个库来转换API中的JSON响应。我需要做的是接受任意的JSON,并更改某些字段名。我使用scala和argonaut,但在文档中看不到任何方式,也没有看到更改字段名的示例,只有值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-21 20:41:14

最后,我在需要转换和添加到地图上的对象上折叠,然后创建一个新的json对象。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-01-21 19:10:47

我不知道有什么特别好的方法来做到这一点,但是编写一个助手来替换对象中的字段,然后用withObject在游标中使用该方法并不太糟糕。

代码语言:javascript
复制
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}}})

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21264764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档