- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试读取 xml 文件并使用 groovy 的 JsonBuilder 将其转换为 json。问题是当我打印时
def builder = new JsonBuilder(jsonObject)
println builder.toPrettyString()
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)
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>
</countries>
<record type='speed'>Production Pickup Truck with speed of 271kph
</record>
</car>
<car name='P50' make='Peel' year='1962'>
<countries>
<country>
Monaco
</country>
</countries>
<record type='size'>Smallest Street-Legal Car at 99cm wide and 59 kg
in weight</record>
</car>
<car name='Royale' make='Bugatti' year='1931'>
<record type='price'>Most Valuable Car at $15 million</record>
<countries>
<country>
Italia
</country>
</countries>
</car>
<car name='Seat' make='Ibiza' year='1985'>
<record type='price'>barato</record>
<countries>
<country>
Spain
</country>
</countries>
</car>
</records>
'''
def xmlRecords = new XmlSlurper().parseText(carRecords)
def jsonObject = [:]
jsonObject.records = []
def records = jsonObject.records
xmlRecords.car.each {xmlCar ->
records.add([
countries:
xmlCar.countries.children().each{ country ->
println "country : ${country.text()}"
[country: country.text()]
},
])
}
def builder = new JsonBuilder(jsonObject)
println builder.toPrettyString()
//println builder.toString()
}
}
最佳答案
tl;博士:你的第二个(内)each
应该是 collect
反而。
真正的答案: each
的返回值是原版Iterable
调用它。在这种情况下,这将是表达式 xmlCar.countries.children()
定义的 XML 对象集合。 .由于该集合中的对象包含对它们自己父对象的引用,因此您的 JSON 构建会导致无限回归,从而导致堆栈溢出。
这不会发生在您第一次(外部)使用 each
时,因为您没有使用返回值。相反,您将添加到预先存在的列表 ( records
)。
通过更改第二个(内部)each
成collect
,您仍在遍历 countries
的子代元素。然而,不是返回原始的 XML 子级( each
的结果),而是编译并返回形式为 [country:"country_string_from_xml"]
的映射列表。 ,这似乎是所需的行为。
困惑 each
和 collect
这是 Groovy 中一个常见的新手错误……这让我上周发生的事情变得更加痛苦。 :-)
关于groovy - 捕获 : java. lang.StackOverflowError JsonBuilder 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26664953/
如果我有一个简单的对象,例如 class Person { String name Integer age } 我可以使用 JSONBuilder 轻松地将其用户定义的属性呈现为 JSON d
我有一个具有以下架构的文档, { "_index": "test", "_type": "user", "_id": "2", "_score": 1, "_
有没有一种方法可以在Groovy中使用JSONBuilder嵌套JSON数组?更明确地说,我有一个Grails应用程序,需要渲染如下所示的内容: { "event": { "t
我需要创建一个像这样的 json 消息: { success:true, count:3, data: [ {id:1}, {id:2}, {id:3} ] }
我正在尝试将 JsonBuilder 与 Groovy 结合使用以动态生成 JSON。我想创建一个 JSON block ,例如: { "type": { "__type":
有谁知道在使用最新版本的 Grails JSONBuilder 多次发出同一个对象时避免重复闭包的方法? 我有一个 Group包含 Members 集的域对象和 Leaders .我想找到一种方法来发
有谁知道如何阻止 JsonBuilder 方法弄乱字段顺序。我有一个类对象,我将其传递到 JsonBuilder 方法中,它正在排列我的字段。我怎样才能阻止这种行为? class JsonObj {
如何使用具有相同名称的键和值的 JsonBuilder 构造 json? import groovy.json.JsonBuilder def userId = 12 // some user id
创建的 JSON 对象有两个额外的属性: contentHash 原始类名 它们会自动添加,这是我不想要的。 PFB代码 class Info{ def summary def des
是否可以使用默认的 JsonBuilder 库在 Groovy 中创建 JSON 值以排除对象的所有空值?例如Jackson 在Java 中通过注释类来排除空值所做的事情。 一个例子是: { "
我想用 JSON-Builder 创建一个数组。 预期格式: { "Header": { "SomeKey" : "SomeValue" } "Data": [ {
我正在尝试在 groovy servlet 中使用 JsonBuilder(扩展 HttpServlet) 这是一个片段: public void doGet(HttpServletRequest
我需要创建一个 json 用作 http.request 中的正文。我能够动态构建 json,但在调用 builder.toString() 两次时我注意到一个奇怪的行为。生成的 json 完全不同。
我想使用闭包方式来制作以下 json: { "root": [ { "key": "testkey", "value": "te
我在 Java 类中有一个授权枚举:公共(public)枚举 FinalResponse { THING_1("Thing1") { @Override String getDescr
目标:鉴于下面的 myInfoObject 定义,我希望能够做到这一点: println new groovy.xml.MarkupBuilder(myInfoObject).toPrettyStri
我正在编写一个需要将 JSON POST 到 URL 的 Groovy 脚本。我注意到一个问题是我的 JSON 中包含“/”的所有元素都被 JSON Builder 更改为“\/”。有没有办法阻止这种
(这是对 here 提出的问题的后续问题) 我正在使用 Groovy 的 JsonBuilder 动态生成以下 JSON: { "type": { "__type": "urn
我一直在尝试读取 xml 文件并使用 groovy 的 JsonBuilder 将其转换为 json。问题是当我打印时 def builder = new JsonBuilder(jsonObject
我正在做一个需要返回 JSON 的单元测试。为了构建它,我使用了 JSONBuilder 中的 toPrettyString() 方法。 这是要规范的类: class Lugar { Strin
我是一名优秀的程序员,十分优秀!