4

メール内の JSON 文字列を解析する Groovy で書かれた小さなツールを開発しています。これらの 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 文字列を解析してマップまたはその他の適切なデータ構造にする方法を見つける必要があります。

4

1 に答える 1

6

json で文字列が適切にエスケープされていません。テキスト データは次のようになります。

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

取得している文字列は、メール本文に json の形式が含まれていることを示しています。 { "hello": "world with "quotation marks"" } 一方、 { "hello": "world with \"quotation marks\"" } 以前の場合は、コードがエスケープされたデータを識別する方法がないため、無効な json を解析できません。

于 2016-01-15T10:11:45.530 に答える