2016-04-09 1 views
0

Я новичок в json, и мне нужно получить значение из ответа веб-службы. Я использовал org.json библиотека для this.Below это значение выборки JSON:Почему JSON Parser дает, ошибка org.json.JSONException: Ожидается a:: после ключа в 5 [символ 6 строка 1]

{"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" 
     + "   }" 
     + "}"; 

государственной статической силы основных (конечная строка [] 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) 

Я видел похожие post. Но не мог понять решение.

+0

I предложите удалить часть ввода, пока проблема не исчезнет. Это должно указывать на характер, который имеет место. Казалось бы, это не нравится '_', хотя я думал, что это действительный персонаж. Можете ли вы попробовать удалить его? –

+0

Я не получаю текст о «удалении части входа до проблемы». – Ramgau

ответ

1

Я не вижу никаких проблем. Я использовал тот же код, но я могу выполнить вашу программу:

Вы можете увидеть мой код, я использовал тот же java api тоже.

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()); 
    } 

} 

может быть проблемой с char-set.

0

У меня была аналогичная проблема, оказалось, что строка JSON, скопированная из другого места, содержала неразрывные символы пробела, которую трудно заметить даже под отладчиком :). Я удалял HTML-тег из этой строки (полученной по электронной почте) с:

jstr = jstr.replaceAll("<.*?>", ""); // removes anything between <and> 

и результат выглядел как действительный JSON, но с этими неразрывными пробелами ... Это помогло:

jstr = jstr.replaceAll("<.*?>|\u00a0", ""); 
Смежные вопросы