You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JsonSlurper如何正确解析内嵌原始JSON字符串的JSON数据?

问题场景

在CI/CD工具中实现Postman集合自动化运行时,JsonSlurper无法正常解析内部包含原始JSON字符串的JSON数据。
复现问题的示例代码:

import groovy.json.JsonSlurper

def data = '''
{
    "request":{
        "raw": "{\n   \"Hello\": \"World\"\n}"
    }
}
'''
def parser = new JsonSlurper()
jsonData = parser.parseText(data)
println(jsonData)

运行代码抛出如下异常:

Caught: groovy.json.JsonException: expecting '}' or ',' but got current char ''' with an int value of 39

The current character read is ''' with an int value of 39
expecting '}' or ',' but got current char ''' with an int value of 39
line number 3
index number 7
    'request':{
....^
groovy.json.JsonException: expecting '}' or ',' but got current char ''' with an int value of 39

The current character read is ''' with an int value of 39
expecting '}' or ',' but got current char ''' with an int value of 39
line number 3
index number 7
    'request':{
....^
at main.run(main.groovy:12)

目标是让JsonSlurper将raw字段的取值作为普通字符串处理。

报错根因

该问题和JsonSlurper的解析逻辑无关,是硬编码JSON字符串时的转义处理错误导致的:
Groovy的三单引号'''定义的字符串中,仅单引号转义符\'会被识别,其余场景下反斜杠会被当做普通字符保留。代码中写的\"最终传入JSON解析器时会变成未转义的双引号,直接破坏外层JSON的语法结构。解析器读到raw字段内部的双引号时,会误认为raw的字符串值已经结束,后续字符不符合JSON语法规则,因此抛出异常。

解决方案

根据使用场景选择对应处理方式即可:

  • 场景1:需要在Groovy代码中硬编码嵌套JSON的字符串
    改用三双引号"""定义字符串,同时对嵌套JSON内部的转义符做二次转义,保证传入解析器的JSON结构合法。修改后的可运行代码如下:
    import groovy.json.JsonSlurper
    
    def data = """
    {
        "request":{
            "raw": "{\\n   \\"Hello\\": \\"World\\"\\n}"
        }
    }
    """
    def parser = new JsonSlurper()
    jsonData = parser.parseText(data)
    // 此时raw字段会被识别为普通字符串
    println(jsonData.request.raw) // 输出: {  "Hello": "World" }
    
    // 如果需要解析raw内部的JSON,单独调用一次解析方法即可
    def rawJson = parser.parseText(jsonData.request.raw)
    println(rawJson.Hello) // 输出: World
    
  • 场景2:从外部文件/接口读取Postman集合JSON(CI/CD场景的通用情况)
    这类场景不需要额外做转义处理。只要读取的源文件是Postman导出的合法JSON文件,文件本身的转义格式符合规范,JsonSlurper会自动将raw字段识别为字符串类型,不会尝试解析其内部的JSON结构。如果后续需要使用raw字段内的JSON内容,单独对该字段值调用一次parseText解析即可。

内容的提问来源于stack exchange,提问作者Joseph Woolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:48:23