如何使用 JsonBuilder 构造 json,键和值具有相同的名称?
import groovy.json.JsonBuilder
def userId = 12 // some user id obtained from else where.
def json = new JsonBuilder()
def root = json {
userId userId
}
print json.toString()
产生错误
groovy.lang.MissingMethodException: 没有方法的签名: java.lang.Integer.call(( 适用于参数类型: (java.lang.Integer( 值: [12] 可能的解决方案: wait((, any((, abs((, wait(long(, wait(long, int(, and(java.lang.Number(
引用密钥确实没有效果。知道如何使这项工作。
编辑:
我希望 JSON 像{ userId: 12 }
一样。另外,为什么将密钥写为字符串不起作用?
long userId = 12
def json = new JsonBuilder()
def root = json {
"userId" userId
}
提供的示例只是一个片段。情况是我有很多控制器操作,其中已经有各种变量。现在我正在添加一个部分,我正在尝试创建一个具有变量包含的各种值的 JSON 字符串。因此,更改现有变量名称不是很实用,如果我可以用相同的名称构造 JSON 字符串,它会更加一致。为我想要的所有变量编写访问器方法也不是一个优雅的方法。我目前所做的是使用不同的命名方案,例如user_id
userId
但同样,它与我遵循的其他约定不一致。所以我正在寻找一种优雅的方法以及JsonBuilder
以这种方式行事的原因。
在JavaScript的情况下,
var a = 1
JSON.stringify({a: a}) // gives "{"a":1}"
这是预期的结果。
- 声明变量
userId
的访问器,如果您需要 JSON 看起来像{userId:12}
如
import groovy.json.JsonBuilder
def getUserId(){
def userId = 12 // some user id obtained from else where.
}
def json = new JsonBuilder()
def root = json{
userId userId
}
print json.toString()
- 如果您需要 JSON 看起来像
{12:12}
这是最简单的情况:
然后
import groovy.json.JsonBuilder
def userId = 12 // some user id obtained from else where.
def json = new JsonBuilder()
def root = json{
"$userId" userId
}
print json.toString()
- 只是为了时髦的脚本,您可以从
userId
中删除def
以获得第一个行为。 :)
如
import groovy.json.JsonBuilder
userId = 12
def json = new JsonBuilder()
def root = json{
userId userId
}
print json.toString()
更新
在构建 JSON 时,局部变量也可以用作映射键(默认情况下为 String(。
import groovy.json.JsonBuilder
def userId = 12
def age = 20 //For example
def email = "abc@xyz.com"
def json = new JsonBuilder()
def root = json userId: userId, age: age, email: email
print json.toString() //{"userId":12,"age":20,"email":"abc@xyz.com"}
import groovy.json.JsonBuilder
def userId = "12" // some user id obtained from else where.
def json = new JsonBuilder([userId: userId])
print json.toString()
我能够使用不同的参数来获得所需的输出,以JsonBuilder
的call()
方法。 即,不是传入闭包,而是传入映射。
使用 def call(Map m)
而不是 def call(Closure c)
。
import groovy.json.JsonBuilder
long userId = 12
long z = 12
def json = new JsonBuilder()
json userId: userId,
abc: 1,
z: z
println json.toString() //{"userId":12,"abc":1,"z":12}