首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala中使用Jerkson合并两棵JSON树

在Scala中使用Jerkson合并两棵JSON树
EN

Stack Overflow用户
提问于 2012-03-04 06:13:25
回答 1查看 804关注 0票数 2

看起来很简单的事情,也许在Jerkson中有内置的例程,但我写了一个简单的合并函数。它应该合并两个JSON树,合并字典,并用更新值覆盖源代码和更新中的任何内容,并获取更新中不在源代码中的任何内容。我猜这是你想要合并的个人选择,所以我可以看到没有内置的。我想确认没有更好的方法,而且这种方法并不愚蠢。

代码语言:javascript
复制
def merge(name: String, source: JObject, update: JObject) : JField = {
  JField(name, JObject(
    source.fields.map { x: JField =>
      // Do we have an updated value in our update
      findValue(x.name, update) match {
        // If so check what kind of value
        case Some(updatedField) => updatedField match {
          // If it's an object, merge it down
          case updatedObject: JObject => {
            x.value match {
              case sourceObject: JObject => merge(x.name, sourceObject, updatedObject)
              case other => JField(x.name, updatedObject)
            }
          }
          case other => other
        }
        case None => x
      }

    }
    // Concat with a list of fields that exist in the update and not in the source
    ::: (update.fields.filter { x =>
      findValue(x.name, source) match {
        case None => true
        case Some() => false
      }
    })
  ))
}
def findValue(name: String, obj: JObject) : Option[JField] = obj.fields.filter(_.name==name).headOption 
EN

回答 1

Stack Overflow用户

发布于 2012-07-20 03:50:57

我不知道Jerkson有什么开箱即用的功能,但lift-json scala库支持合并和差异json树。我知道您可能与Jerkson绑定在一起,所以可能无法直接使用它,但看看他们是如何实现它的可能会很有趣。文档和源代码在github上:https://github.com/lift/framework/tree/master/core/json#merging--diffing

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

https://stackoverflow.com/questions/9550339

复制
相关文章

相似问题

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