2017-02-22 5 views
0

ビルド設定スクリプトのためにJSONマップの深いコピーをgroovyで作成しようとしています。Groovyディープコピーjson map

私はthis existing questionから選択解答

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

を試してみましたが、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)