コードを検討してください:
Map prJsonData = readJSON text: '{}'
prJsonData.head = "release/${NEW_TAG}" as String
prJsonData.title = "Release ${NEW_TAG}"
writeJSON(file: 'create-pr.json', json: prJsonData, pretty: 4)
と出力
{
"head": "release/v1.0.2",
"title": {
"bytes": [
82,
101,
97
],
"strings": [
"Release ",
""
],
"valueCount": 1,
"values": ["v1.0.2"]
}
}
指定as String
すると、補間が機能するように出力が変更されるのに、これがないと、出力はある種の複雑なタイプのように見えるのはなぜですか。
$
文字列内で変数を置き換えるために使用する場合、実際にはJava文字列は返されませんが、GString
。そこでのJSONシリアライザーは、代わりにそれをシリアル化します。
groovy:000> a=1
===> 1
groovy:000> s="$a"
===> 1
groovy:000> s.getClass()
===> class org.codehaus.groovy.runtime.GStringImpl
groovy:000> s.properties
===> [values:[1], class:class org.codehaus.groovy.runtime.GStringImpl, bytes:[49], strings:[, ], valueCount:1]
.toString()
コンシューマーが任意のオブジェクトを受け入れる場合、文字列の使用または文字列へのキャストが必要になることが多いため、これが違いを生みます。JSONライブラリによっては、このような混乱を防ぐために、GString用に独自のシリアライザーを追加することをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加