我们可以通过groovy的json builder生成一个对象类型的json:
def builder = new groovy.json.JsonBuilder()
def root = builder.people {
person {
firstName 'Guillame'
lastName 'Laforge'
// Named arguments are valid values for objects too
address(
city: 'Paris',
country: 'France',
zip: 12345,
)
married true
// a list of values
conferences 'JavaOne', 'Gr8conf'
}
}
def jsonStr = builder.toString()
Run Code Online (Sandbox Code Playgroud)
我喜欢这种类型的语法,但是如何构建一个数组类型的json?
例如
[
{"code": "111", "value":"222"},
{"code": "222", "value":"444"}
]
Run Code Online (Sandbox Code Playgroud)
我发现一些文件说我们应该使用JsonBuilder()构造函数:
def mydata = [ ["code": "111", "value":"222"],["code": "222", "value":"444"] ]
def builder = new groovy.json.JsonBuilder(mydata)
def …Run Code Online (Sandbox Code Playgroud) 如何使用具有相同名称的键和值的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)
这是预期的结果.
我想用JSON-Builder创建一个数组.
预期格式:
{
"Header": {
"SomeKey" : "SomeValue"
}
"Data": [
{
"SomeKey" : "SomeValue"
},
{
"SomeKey" : "SomeValue"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的代码:
def builder = new groovy.json.JsonBuilder()
def root = builder {
Header {
"Typ" "update"
"Code" "UTF-8"
"TransaktionsNr" item.transactionNumber
"DatumZeit" new Date().format("dd.MM.yyyy HH:mm")
}
customers.each ({ customer->
"Data" {
"Email" customer.code
"Newsletter" customer.newsletterSubscribed
}
})
Run Code Online (Sandbox Code Playgroud)
无论我做什么,我只在数据部分得到一个元素.我尝试使用[]而不是{},但我仍然只得到一个元素,我做错了什么?
我试图修改json的内容,然后打印它以查看它是否已更改此代码但收到错误
def builder = new JsonBuilder(request)
log.info(builder.content)
builder.content.device.dpidsha1= 'abcd'
log.info(builder.toPrettyString())
Run Code Online (Sandbox Code Playgroud)
错误:
no such property: device
Run Code Online (Sandbox Code Playgroud)
json看起来像这样:
{
"app":{ },
"at":2,
"badv":[ ],
"bcat":[ ],
"device":{
"carrier":"310-410",
"connectiontype":3,
"devicetype":1,
"dnt":0,
"dpidmd5":"268d403db34e32c45869bb1401247af9",
"dpidsha1":"1234",
.
.
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助理解我做错了什么,我怎么能纠正它.
我需要在JSON中构建一个简单的JSON数组,但在循环中它会在每次迭代期间覆盖第一个值.
def jsonBuilder = new groovy.json.JsonBuilder()
contact.each {
jsonBuilder.contact(
FirstName: it.getFirstName(),
LastName: it.getLastName(),
Title: it.getTitle(),
)
}
Run Code Online (Sandbox Code Playgroud)
它只返回简单的JSON并覆盖每次迭代的值并保留最后一次.在groovy中构造JSON数组的语法是什么?
我一直在尝试读取 xml 文件并使用 groovy 的 JsonBuilder 将其转换为 json。问题是当我打印时
def builder = new JsonBuilder(jsonObject)
println builder.toPrettyString()
Run Code Online (Sandbox Code Playgroud)
我被抓住了:java.lang.StackOverflowError
这是整个堆栈跟踪
Exception in thread "main" java.lang.StackOverflowError
at groovy.json.JsonOutput.writeObject(JsonOutput.java:259)
at groovy.json.JsonOutput.writeIterator(JsonOutput.java:442)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:272)
at groovy.json.JsonOutput.writeIterator(JsonOutput.java:442)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:272)
at groovy.json.JsonOutput.writeIterator(JsonOutput.java:442)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:272)
at groovy.json.JsonOutput.writeIterator(JsonOutput.java:442)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:272)
at groovy.json.JsonOutput.writeIterator(JsonOutput.java:442)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:272)
at groovy.json.JsonOutput.writeIterator(JsonOutput.java:442)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:272)
at groovy.json.JsonOutput.writeIterator(JsonOutput.java:442)
Run Code Online (Sandbox Code Playgroud)
这是代码。
package firstgroovyproject
import groovy.json.JsonBuilder
class XmlToJsonII {
static void main(def args){
def carRecords = '''
<records>
<car name='HSV Maloo' make='Holden' year='2006'>
<countries>
<country>
Austria
</country>
<country>
Spain
</country> …Run Code Online (Sandbox Code Playgroud) 是否可以使用默认的JsonBuilder库在Groovy中创建JSON值以排除对象的所有空值?比如杰克逊在Java中通过注释类来排除空值.
一个例子是:
{
"userId": "25",
"givenName": "John",
"familyName": null,
"created": 1360080426303
}
Run Code Online (Sandbox Code Playgroud)
哪个应该打印为:
{
"userId": "25",
"givenName": "John",
"created": 1360080426303
}
Run Code Online (Sandbox Code Playgroud) 我想使用闭包方式来制作以下 json:
{
"root": [
{
"key": "testkey",
"value": "testvalue"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下语法:
new JsonBuilder().root {
'key'(testKey)
'value'(testValue)
}
Run Code Online (Sandbox Code Playgroud)
但它产生:
{
"root": {
"key": "testkey",
"value": "testvalue"
}
}
Run Code Online (Sandbox Code Playgroud) 我使用JsonBuilder来构建JSONObject/String.
但是,如何更新/更改此JSONObject/String中一个字段的值?
我没有看到使用JsonBuilder执行此操作的可能性.我用什么节目呢?
我正在使用Groovy,我试图创建一个简单的函数,它将从提供的Json字符串构造一个Json对象,然后我试图打印这个字符串,但不幸的是它在输出中添加了方括号.
这是我代码中的代码段:
def JsonBuilder ConstructJsonObject (jsonStr) {
def jsonToReturn = new JsonBuilder();
def root = jsonToReturn(jsonStr);
return jsonToReturn;
}
String jsonStr = "{id: '111'}";
println(jsonStr);
def jsonObject = ConstructJsonObject(jsonStr);
println(jsonObject.toPrettyString());
Run Code Online (Sandbox Code Playgroud)
这是输出:
{id:'111'}
["{id:'111'}"]
它返回一个数组,而不是一个纯粹的Json.