如何使用JsonBuilder构造json,其键具有变量名称和值具有其值?

12 groovy json jsonbuilder

如何使用具有相同名称的键和值的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()
Run Code Online (Sandbox Code Playgroud)

哪会产生错误

groovy.lang.MissingMethodException:没有方法签名:java.lang.Integer.call()适用于参数类型:(java.lang.Integer)values:[12]可能的解决方案:wait(),any(),abs (),wait(long),wait(long,int)和(java.lang.Number)

引用密钥确实没有效果.知道如何使这项工作.

编辑:

我希望JSON像{ userId: 12 }.另外,为什么将键作为字符串写不起作用?

long userId = 12   
def json = new JsonBuilder()
def root = json {
    "userId" userId
}
Run Code Online (Sandbox Code Playgroud)

提供的示例只是一个片段.情况是我有很多控制器动作,它们已经有各种变量.现在我添加一个部分,我试图创建一个JSON字符串,其中包含变量所具有的各种值.因此,更改现有变量名称并不是很实际,如果我可以构造具有相同名称的JSON字符串,那么它将更加一致.为我想要的所有变量编写访问器方法也不是一种优雅的方法.我目前所做的是使用不同的命名方案user_id,userId但同样,它与我遵循的其他约定不一致.所以我正在寻找一种优雅的方法,以及为什么JsonBuilder这样做的原因.

在JavaScript的情况下,

var a = 1
JSON.stringify({a: a})    // gives "{"a":1}"
Run Code Online (Sandbox Code Playgroud)

这是预期的结果.

dma*_*tro 22

  • 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()
Run Code Online (Sandbox Code Playgroud)
  • 如果你需要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()
Run Code Online (Sandbox Code Playgroud)
  • 只是Groovy脚本的缘故,你可以删除def从userId拿到第一行为.:)

如

import groovy.json.JsonBuilder

userId = 12

def json = new JsonBuilder()
def root = json{
    userId userId
}
print json.toString()
Run Code Online (Sandbox Code Playgroud)

UPDATE

在构建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"}
Run Code Online (Sandbox Code Playgroud)