2017-02-22 132 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)