2017-02-22 5 views
0

Ich versuche, eine tiefe Kopie einer JSON-Map in groovy für ein Build-Config-Skript zu erstellen.Groovy tiefe Kopie JSON Karte

Ich habe die gewählte Antwort versuche

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() 
} 

von this existing question aber es funktioniert nicht für JSON Karten mit java.io.NotSerializableException: groovy.json.internal.LazyMap

wie kann ich eine tiefe Kopie der JSON Karte erstellen?

+1

Ich denke, wenn Sie können, sollten Sie ein wenig weiter sichern. Der 'JsonSlurper' in der Groovy-API generiert diese' LazyMap'-Instanzen, die sich mit verschiedenen Aspekten der Unternehmensentwicklung, insbesondere mit den Anforderungen für die Serialisierbarkeit von Beer (wie Sie feststellen), schwer tun. Wenn Sie zu 'JsonServerClassic' wechseln können, das regelmäßige Groovy/Java' LinkedHashMap'-Instanzen generiert, sollte Ihr "NotSerializable" -Problem verschwinden. – BalRog

Antwort

1

Sobald Sie den JSON gelesen haben, haben Sie die Kopie.

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)