考虑代码:
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
会更改输出以使插值有效,但如果没有此操作,则输出似乎是某种复杂类型。
答案 0 :(得分:3)
当在字符串中使用$
替换其中的变量时,实际上并没有获得Java String,而是返回了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()
或强制转换为String,因此有所不同。根据您的JSON库,最好为GString添加自己的序列化器,以防止此类混淆。