将字符串解析为JSON

时间:2014-01-17 09:24:42

标签: java json

我的控制台将String结果的值打印为

[{"series":[ {\"data\" : [ 100.0 , 222.0 , 555.0 , 367.0 , 100.0]}],"yAxis":{\"plotLines\":[{\"dashStyle\":\"solid\",\"color\":\"black\",\"width\":\" 2.0\",\"value\":\" 27.0\",\"label\":{\"text\":\"Average\"}}],\"title\":{\"text\":\"FTFR\"}},"title":{\"text\":\"First Time Fix Rate\"},"legend":{\"backgroundColor\":\"#FFFFFF\"},"chart":{\"type\":\"line\"},"xAxis":{\"title\":{\"text\":\"Time(Years)\"},\"categories\":\[2009 , 2010 , 2011 , 2012 , 2013]}}]"

我需要将String结果解析为有效的JSON

但以下代码抛出异常:

 JSONParser parser = new JSONParser();
  Object obj = parser.parse(result);

例外:

  

org.jboss.resteasy.spi.UnhandledException:意外的字符(\)at   第14位。

如何将这种字符串解析为正确的JSON?

4 个答案:

答案 0 :(得分:3)

在双引号之前不能使用反斜杠。这不是正确的JSON。

答案 1 :(得分:2)

你不应该\"。您是否将此结果粘贴到IDE中然后尝试解析它? (Netbeans将\添加到另一组引号内的任何引号。

如果另一方面,这正是你得到的字符串类型,你需要这样做:

        String str = "[{\"series\":[ {\\\"data\\\" : [ 100.0 , 222.0 , 555.0 , 367.0 , 100.0]}],\"yAxis\":{\\\"plotLines\\\":[{\\\"dashStyle\\\":\\\"solid\\\",\\\"color\\\":\\\"black\\\",\\\"width\\\":\\\" 2.0\\\",\\\"value\\\":\\\" 27.0\\\",\\\"label\\\":{\\\"text\\\":\\\"Average\\\"}}],\\\"title\\\":{\\\"text\\\":\\\"FTFR\\\"}},\"title\":{\\\"text\\\":\\\"First Time Fix Rate\\\"},\"legend\":{\\\"backgroundColor\\\":\\\"#FFFFFF\\\"},\"chart\":{\\\"type\\\":\\\"line\\\"},\"xAxis\":{\\\"title\\\":{\\\"text\\\":\\\"Time(Years)\\\"},\\\"categories\\\":\\[2009 , 2010 , 2011 , 2012 , 2013]}}]\"";
    System.out.println(str.replaceAll("\\\\\"", "\"").replaceAll("\\\\\\[","["));

收率:

[{"series":[ {"data" : [ 100.0 , 222.0 , 555.0 , 367.0 , 100.0]}],"yAxis":{"plotLines":[{"dashStyle":"solid","color":"black","width":" 2.0","value":" 27.0","label":{"text":"Average"}}],"title":{"text":"FTFR"}},"title":{"text":"First Time Fix Rate"},"legend":{"backgroundColor":"#FFFFFF"},"chart":{"type":"line"},"xAxis":{"title":{"text":"Time(Years)"},"categories":[2009 , 2010 , 2011 , 2012 , 2013]}}]"

在你的情况下,你可能想要在每种情况下取​​消两个斜杠,我必须制作它们以便我可以在我的IDE上执行它。

答案 2 :(得分:1)

您可以执行类似

的操作
Object obj = parser.parse(result.replace("\\", ""));

删除所有\,但它看起来像一个可怕的黑客。 (顺便说一下,用\"替换序列"应该是不够的,因为还有\[应该会产生问题。)

如何在控制台中获取该字符串? 似乎逃脱角色甚至没有系统地存在。

答案 3 :(得分:0)

同意npinti您可能尝试使用反斜杠作为转义字符,但在打印时不应该看到它。所以你可能已经逃脱了逃脱角色。当你这样说时,有点好笑.. :)