具有转义引号的Groovy JsonSlurper JSON值

时间:2016-01-15 09:50:33

标签: json string groovy escaping jsonslurper

我正在开发一个用Groovy编写的小工具,它可以解析电子邮件中的JSON字符串。其中一些JSON字符串具有包含转义引号的JSON值。

例如:

{
   "hello": "world with \"quotation marks\""
}

要解析这些字符串,我使用的是Groovy的JsonSlurper。以下代码演示了我的问题:

import groovy.json.JsonException
import groovy.json.JsonSlurper

try {     
  print new JsonSlurper().parseText('''
    {
      "hello": "world with \"quotation marks\""
    }
  ''')
} catch (JsonException | IllegalArgumentException e) {
  print e
}

请参阅https://groovyconsole.appspot.com/script/6193189027315712了解即时演示。

执行此代码时,抛出以下异常:

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

The current character read is 'q' with an int value of 113
expecting '}' or ',' but got current char 'q' with an int value of 113
line number 3
index number 35
      "hello": "world with "quotation marks""
............................^

因此,JsonSlurper会忽略引号的转义。不幸的是,我无法控制输入,即JSON字符串。因此,我必须找到一种方法将这样的JSON字符串解析为地图或任何其他适当的数据结构。

1 个答案:

答案 0 :(得分:3)

字符串未在json中正确转义。文本数据应该是:

'''
{
"hello": "world with \\\"quotation marks\\\""
}
'''

您获得的字符串表示邮件正文包含以下格式的json: { "hello": "world with "quotation marks"" } 虽然应该是这样的 { "hello": "world with \"quotation marks\"" } 如果情况较早,则无法解析无效的json,因为代码无法识别转义的数据。