Java JSON解析器为何给出错误org.JSON.JSONException:应为';:';在5[字符6第1行]处的键之后

Java JSON解析器为何给出错误org.JSON.JSONException:应为';:';在5[字符6第1行]处的键之后,java,json,Java,Json,我是json新手,必须从web服务响应中获取值。我已经为此使用了org.json库。下面是示例json值: {"tms_guid": "9LaHmoHpmTd811R",    "recharge_status": "100",    "message": "Transaction Successful",    "response_time": {       "verifyClient": 0.0281,       "verifyGuid": 0.8695,       "verifyOp

我是json新手,必须从web服务响应中获取值。我已经为此使用了org.json库。下面是示例json值:

{"tms_guid": "9LaHmoHpmTd811R",
   "recharge_status": "100",
   "message": "Transaction Successful",
   "response_time": {
      "verifyClient": 0.0281,
      "verifyGuid": 0.8695,
      "verifyOperator": 0.8698,
      "verifyMsid": 0.8698,
      "tms_guid": 1.6971,
      "queryErr": 7.4243,
      "StoringRecharge": 7.4358,
      "UpdatingBalance": 7.448
   }
}
我的解析JSON输入字符串是:

private final static String JSON_TEST_DATA
        = "{"
        + "   \"tms_guid\": \"9LaHmoHpmTd811R\", "
        + "   \"recharge_status\": \"100\", "
        + "   \"message\": \"Transaction Successful\", "
        + "   \"response_time\": { "
        + "      \"verifyClient\": 0.0281, "
        + "      \"verifyGuid\": 0.8695, "
        + "      \"verifyOperator\": 0.8698,"
        + "      \"verifyMsid\": 0.8698,"
        + "      \"tms_guid\": 1.6971,"
        + "      \"queryErr\": 7.4243,"
        + "      \"StoringRecharge\": 7.4358,"
        + "      \"UpdatingBalance\": 7.448"
        + "   }"
        + "}";
公共静态void main(最终字符串[]argv)抛出JSONException{

    System.out.println(JSON_TEST_DATA);
    final JSONObject testObj = new JSONObject(JSON_TEST_DATA);
 System.out.println(testObj.toString());
}

例外情况如下:

Exception in thread "main" org.json.JSONException: Expected a ':' after a key at 5 [character 6 line 1]
    at org.json.JSONTokener.syntaxError(JSONTokener.java:432)
    at org.json.JSONObject.<init>(JSONObject.java:206)
    at org.json.JSONObject.<init>(JSONObject.java:310)
    at com.kalsym.wsp.sp.icebeep.TestIceBeep.main(TestIceBeep.java:73)
线程“main”org.json.JSONException中的异常:在5[字符6第1行]处的键后应为“:”
位于org.json.JSONTokener.syntaxError(JSONTokener.java:432)
位于org.json.JSONObject(JSONObject.java:206)
位于org.json.JSONObject(JSONObject.java:310)
位于com.kalsym.wsp.sp.iceep.TestIceBeep.main(TestIceBeep.java:73)

我也见过类似的例子。但无法找到解决方案。

我看不出有任何问题。我使用了与您相同的代码,但我能够执行您的程序:

您可以看到我的代码,我也使用了相同的JavaAPI

import org.json.JSONException;
import org.json.JSONObject;

public class TestCode {

    private final static String JSON_TEST_DATA
    = "{"
    + "   \"tms_guid\": \"9LaHmoHpmTd811R\", "
    + "   \"recharge_status\": \"100\", "
    + "   \"message\": \"Transaction Successful\", "
    + "   \"response_time\": { "
    + "      \"verifyClient\": 0.0281, "
    + "      \"verifyGuid\": 0.8695, "
    + "      \"verifyOperator\": 0.8698,"
    + "      \"verifyMsid\": 0.8698,"
    + "      \"tms_guid\": 1.6971,"
    + "      \"queryErr\": 7.4243,"
    + "      \"StoringRecharge\": 7.4358,"
    + "      \"UpdatingBalance\": 7.448"
    + "   }"
    + "}";

    public static void main (String arg[]) throws JSONException{

        //System.out.println(JSON_TEST_DATA);
        final JSONObject testObj = new JSONObject(JSON_TEST_DATA);

        System.out.println(" --"+testObj.getString("recharge_status")+"\n");
    System.out.println(testObj.toString());
    }

}

可能是一些字符集问题

我刚刚遇到了一个类似的问题,结果发现从另一个地方复制的JSON字符串包含不间断的空格字符,即使在调试器下也很难注意到:)。我正在从该字符串(通过电子邮件接收)中删除HTML标记,方法是:

jstr=jstr.replaceAll(“,”);//删除<和>
结果看起来像是有效的JSON,但是有了这些不间断的空格。。。这有助于:

jstr = jstr.replaceAll("<.*?>|\u00a0", "");
jstr=jstr.replaceAll(“|\u00a0”,”);

我建议您删除部分输入,直到问题消失。这应该指向这样的字符。虽然我认为这是一个有效的字符,但它似乎不喜欢
。你能试着删除它吗?我不了解关于“在出现问题之前删除部分输入”的文字。
jstr = jstr.replaceAll("<.*?>|\u00a0", "");