ネストされたオブジェクト内の JSON 文字列データの逆シリアル化に関するJSON-Lib の問題を発見しました。Groovy の次のコードは問題を示しています。Groovy コンソールでテストできます。
@Grab('net.sf.json-lib:json-lib:2.3:jdk15')
import net.sf.json.*
def s = '''\
{
"attributes": "'{test:1}'",
"nested": { "attributes": "'{test:1}'" }
}'''
def j = JSONSerializer.toJSON(s)
println j
assert j.attributes == "{test:1}" // OK
assert j.nested.attributes == "{test:1}" // Failed
attributes
上記の例では、JSONの両方に同じ文字列値があります"{test:1}"
。JSONSerializer は最初のものをString
値に逆シリアル化し、2番目のものを (多分) に 逆シリアル化しますJSONObject
。そのオブジェクトのクラスがnullを返すため、わかりません。
異なる文字列値 (JSON データのように見えない、たとえば"blah"
) の場合は機能します。
この動作を変更するにはどうすればよいですか?
アップデート
ここでJSON-Libのドキュメントに基づいて文字列値を引用しようとしましたが(そこを指摘してくれた@GemKに感謝します)、同じ結果になりました。文字列値の引用は、ネストされたオブジェクトでは機能しません:-(