2017-02-22 9 views
0

Я пытаюсь создать глубокую копию карты JSON в groovy для скрипта конфигурации сборки.Groovy deep copy json map

Я попытался выбранный ответ

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, но он не для карт в формате JSON с java.io.NotSerializableException: groovy.json.internal.LazyMap

, как я могу создать глубокую копию карты JSON?

+1

Я думаю, что, если вы можете, вы должны сделать резервную копию немного дальше. «JsonSlurper» в API Groovy генерирует эти экземпляры «LazyMap», которые играют хаос с различными аспектами развития предприятия, в частности требования к сериализуемости бинов (как вы открываете). Если вы можете переключиться на «JsonServerClassic», который генерирует обычные экземпляры Groovy/Java 'LinkedHashMap', ваша проблема« 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)