使用JsonBuilder对象的JsonOutput.toJson添加了额外的“content”元素

时间:2018-01-10 09:21:09

标签: groovy jsonbuilder

我正在使用JsonBuilder创建一个新的Json对象。另外,我必须逃避控制和特殊字符。

因此我正在使用JsonOutput.toJson,它会添加一个额外的“content”元素。

示例XML输入:

<?xml version="1.0" encoding="utf-8"?>
<TestRequest>
        <Note>test note....ÄäÜü ß /  $ % §  "</Note>
        <Note2>This is another note. here comes the Zeilenumbruch...bruch&#xA;...hier geh's weiter&#xA;</Note2>
</TestRequest>

样本编码:

class Mapping_41_Test_Control_Chars {
static main(args) {
    def in_xml                                      = new XmlSlurper().parse("./test/Sample_Control_Character.xml")
    def jsonBuilder                                 = new JsonBuilder()

    jsonBuilder{
        note in_xml.Note.toString()
        note2 in_xml.Note2.toString()
    }

    println "-------- prettyPrint_JsonOutput.toJson:"
    println JsonOutput.prettyPrint(JsonOutput.toJson(jsonBuilder));


    def json = JsonOutput.toJson([note: 'test note....ÄäÜü ß /  $ % §  "'])

    println  "-------- json:"
    println JsonOutput.prettyPrint(json)
}

JsonOutput.toJson:

-------- prettyPrint_JsonOutput.toJson:
{
    "content": {
        "note": "test note....\u00c4\u00e4\u00dc\u00fc \u00df /  $ % \u00a7  \"",
        "note2": "This is another note. here comes the Zeilenumbruch...bruch\n...hier geh's weiter\n"
    }
}
-------- json:
{
    "note": "John Doe",
    "age": "test note....\u00c4\u00e4\u00dc\u00fc \u00df /  $ % \u00a7  \""
}

您是否知道在JsonBuilder中使用JsonOutput并获取所需的输出以消除“content”元素?我需要转义特殊字符因此我不能使用toString

谢谢&amp;问候 马可

2 个答案:

答案 0 :(得分:1)

设法通过以下方式解决问题:

JsonOutput.toJson(jsonSlurper.parseText(jsonBuilder.toString()))

答案 1 :(得分:0)

使用JsonOutput.toJson()时,您不必使用JsonBuilder - 它有一个方法JsonBuilder.toPrettyString(),可以创建JSON对象的String表示。< / p>

import groovy.json.JsonBuilder

def builder = new JsonBuilder()
builder {
    name 'John Doe'
    age 99
}

println builder.toPrettyString()

输出

{
    "name": "John Doe",
    "age": 99
}