2017-02-22 153 views
0

我想创建一个JSON映射的Groovy深层副本的构建配置脚本。Groovy深拷贝JSON映射

我曾尝试选择的答案

def deepcopy(orig) { 
    bos = new ByteArrayOutputStream() 
    oos = new ObjectOutputStream(bos) 
    oos.writeObject(orig); oos.flush() 
    bin = new ByteArrayInputStream(bos.toByteArray()) 
    ois = new ObjectInputStream(bin) 
    return ois.readObject() 
} 
this existing question

,但它与java.io.NotSerializableException: groovy.json.internal.LazyMap

失败的JSON的地图我怎么可以创建JSON地图的深层副本?

+1

我认为,如果可以的话,你应该备份一点。 Groovy API中的JsonSlurper会生成这些LazyMap实例,这些实例会对企业开发的各个方面造成严重破坏,特别是bean的可串行化要求(正如您所发现的那样)。如果您可以切换到生成常规Groovy/Java'LinkedHashMap'实例的'JsonServerClassic',那么您的“NotSerializable”问题应该消失。 – BalRog

回答

1

一旦你读了JSON,你就有了副本。

import groovy.json.JsonSlurper 
import groovy.json.JsonOutput 

def json = new JsonSlurper().parseText('''{"l1": {"l2": {"l3": 42}}}''') 
json.l1.l2.l3 = 23 
assert '''{"l2":{"l3":23}}''' == JsonOutput.toJson(json.l1)