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

JsonOutput.toJson using a JsonBuilder object adds additional "content" element

我正在使用 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  \""
}

您是否知道将 JsonOutput 与 JsonBuilder 一起使用并获得所需输出的选项,从而消除了 "content" 元素?我需要转义特殊字符,因此我不能使用 toString

感谢和问候 马可

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

import groovy.json.JsonBuilder

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

println builder.toPrettyString()

输出

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

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

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