3

[{"Id":"1","msg":""Lorem Ipsum""}]this のように、引用符内の引用符をエスケープする必要がある文字列があり[{"Id":"1","msg":"\"Lorem Ipsum\""}]ます。変更するジェネレーター コードにアクセスできないため、正規表現ソリューションまたは効率的な Java ソリューションを探しています。

役に立たないマッチを選んでみまし \"[^\"]*?(\"*)[^\"]*?\"た。どんな助けでも本当に感謝しています。前もって感謝します。

パターンが常に 2 つの二重引用符であるとは限らないことに注意して"Lorem "Ipsum" test"ください"Lorem \"Ipsum\" test"

PS:二重引用符内の二重引用符をエスケープするための正規表現は既に見ました

4

3 に答える 3

3

問題

有限オートマトン (理論的に正規表現に相当するもの) は、再帰構造を解析できません。内部引用符と内部引用符を使用できるため、正規表現を使用して問題を解決することはできません。

最新の正規表現エンジンは、いくつかの拡張機能を使用してこの問題を解決できますが、引用符内の引用符を探して時間を無駄にしないでください。本格的な JSON パーサーを実際に作成していることにすぐに気付くでしょう。

@johnchen902 が述べたように、チューリング マシンを利用したパーサーでさえあいまいさを処理できないため、壊れた JSON の修正を提案しようとしない方がよいでしょう。

ソリューション

専用ユーティリティでJSONを作成

指定された文字列は有効な JSON ではありません。おそらく文字列連結を使用して作成されていますが、これは正しくエスケープされないため、一般的には悪い考えです。gsonなどの Java データ構造から JSON を構築できる JSON ライブラリを使用する必要があります。オブジェクトのリストを作成し、オブジェクトからオブジェクトへの辞書を追加して、ライブラリにエスケープと変換を行わせます。

作成者にバリデーターの使用を依頼する

外部ソースから文字列を受け取った場合、使用できる有効なjson を要求することは完全に正当です。作成者は文字列をつなぎ合わせたと思いますが、これは構造化言語を構築するための間違った方法です。元の作成者に、JSON の作成に標準ライブラリを使用するか、少なくともバリデーターを使用するよう依頼してください。最新のプログラミング言語はすべて、これらのメカニズムを提供します。

ここに画像の説明を入力

于 2013-06-20T12:29:07.633 に答える