尝试在 Groovy 中创建 JSON 结构时出现混淆错误

Confusing error when trying to create a JSON structure in Groovy

我正在尝试在 groovy 中创建一个 JSON 结构:

def builder = new JsonBuilder()

builder.configuration {
            software {
                name name
                version version
                description "description"
            }
            git {
                name "appName"
                repository "repo"
                branch "branch"
            }
        }

其中 nameversionGString 实现。但是,虽然根据调试器似乎可以很好地创建结构,但每当我尝试打印它或将其写入文件时,我都会收到此错误:

Caught: groovy.lang.MissingMethodException: No signature of method: java.lang.String.call() is applicable for argument types: (org.codehaus.groovy.runtime.GStringImpl) values: [*my actual value*]
Possible solutions: wait(), any(), wait(long), take(int), each(groovy.lang.Closure), tap(groovy.lang.Closure)

通过使用引号将 name 更改为普通的“String”也会产生相同的错误。我做错了什么?

这是因为它认为 name(name) 是对名为 name 的变量的调用,在这种情况下它是一个字符串...

您可以调用不在 json 结构中的变量名称(即:将 name 字符串更改为 nameValue 或类似名称)

或者你可以使用 JsonBuilder 的地图形式:

def builder = new JsonBuilder()

def a = 'tim'
def name = "$a"
def version = "$a-1.0"

def root = builder.configuration {
    software(
        name: name,
        version: version,
        description: "description"
    )
    git(
        name: 'appName',
        repository: 'repo',
        branch: 'branch'
    )
}