1

我需要通过一个简短的 Java(不是 JS!)正则表达式片段来清理一个 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]的引号字符,但是如何避免替换部分数字超出了我的低级正则表达式技能。

非常感谢任何帮助!

编辑(第二轮):

感谢您的快速反馈!我不太担心误报,因为我可以控制描述符的内容,并且我会确保它们是纯文本的。空格也可以避免,只可能出现负数 - 好一个!对于 JSON,分隔符始终为逗号 (","),双精度值中的任意小数位数始终由点 (".") 分隔。不幸的是,我无法修复 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 回答