1

短い Java (JS ではありません!) Regex スニペットを介して、誤って引用された数字を含む JSON をクリーンアップする必要があります。私が持っているものの例:

[{"series":"a","x":"1","y":"111.71"},{"series":"a","x":"2","y":"120.25"}]

私が取得する必要があるものの例:

[{"series":"a","x":1,"y":111.71},{"series":"a","x":2,"y":120.25}]

そのため、[0-9] が先行または後続する場合にのみ引用文字を一致させて削除する必要がありますが、数値の一部を置き換えないようにする方法は、私の正規表現のスキルを超えています。

どんな助けでも大歓迎です!

編集(第2ラウンド):

素早いフィードバックをありがとう!記述子の内容を制御できるので、誤検出についてはあまり心配していません。また、記述子がテキストのみであることを確認します。スペースも避けることができます。負の数だけが発生する可能性があります-良いものです! JSON の区切り文字は常にコンマ (",") であり、double 値の任意の小数点以下の桁数は常にドット (".") で区切られます。残念ながら、JSON ソースを修正することはできません。Java でこれをクリーンアップしたいと考えています。

今すぐ提案を試して、報告します。これも試してみます: http://www.regular-expressions.info/lookaround.html#lookbehind

4

2 に答える 2

3

どうですか replaceAll("\"(-?\\d+([.]\\d+)?)\"","$1");

于 2013-05-28T11:14:16.217 に答える
2

これはあなたの特定の例では機能しますが、他の数値の形式が異なる場合は機能しません (私のコメントを参照):

String s = "[{\"series\":\"a\",\"x\":\"1\",\"y\":\"111.71\"},{\"series\":\"a\",\"x\":\"2\",\"y\":\"120.25\"}]";
String clean = s.replaceAll("\"(\\d+\\.?\\d*)\"", "$1");
System.out.println(clean);

出力:

[{"series":"a","x":1,"y":111.71},{"series":"a","x":2,"y":120.25}]
于 2013-05-28T11:13:35.200 に答える