[英]not able to parse json array using org.json library?
我有一個下面的JSON數組,我正在嘗試解析它,但它給了我一個例外:
[{
"response": {
"client": "123456",
"111": {
"data": "0\u00181535480381\u00191535480347\u0018\"voyager\";-1;12;0\u00181535480075\u00191535480069",
"time": "981542121421"
}
}
}]
我正在使用org.json.JSONArray
解析以上JSON,但以下代碼引發異常:
String json =
"[{ \"response\": { \"client\": \"123456\", \"111\": { \"data\": \"0\u00181535480381\u00191535480347\u0018\"voyager\";-1;12;0\u00181535480075\u00191535480069\", \"time\": \"981542121421\" } } }]";
// this line throws exception
JSONArray jsonArray = new JSONArray(json);
這是我看到的異常:
Exception in thread "main" org.json.JSONException: Expected a ',' or '}' at character 81
at org.json.JSONTokener.syntaxError(JSONTokener.java:410)
at org.json.JSONObject.<init>(JSONObject.java:222)
at org.json.JSONTokener.nextValue(JSONTokener.java:344)
at org.json.JSONObject.<init>(JSONObject.java:205)
at org.json.JSONTokener.nextValue(JSONTokener.java:344)
at org.json.JSONObject.<init>(JSONObject.java:205)
at org.json.JSONTokener.nextValue(JSONTokener.java:344)
at org.json.JSONArray.<init>(JSONArray.java:125)
at org.json.JSONArray.<init>(JSONArray.java:157)
我在這里做什么錯?
將esacpe角色放置在voyager周圍,如下所示。
\\\"voyager\\\"
我測試了它的工作原理。
import org.json.JSONArray;
public class Test {
public static void main(String[] args) {
String json = "[{ \"response\": { \"client\": \"123456\", \"111\": { \"data\": \"0\u00181535480381\u00191535480347\u0018\\\"voyager\\\";-1;12;0\u00181535480075\u00191535480069\", \"time\": \"981542121421\" } } }]";
// this line throws exception
JSONArray jsonArray = new JSONArray(json);
}
}
由於在JOSN中已經有轉義字符,因此您需要在Java中進行兩次轉義以保留它們。
\\ “旅行者\\”
這需要兩次轉義。 解析器是看到了\\"
作為報價的結束和期待,
或}
嘗試
\\\"voyager\\\"
在JSON語法中,您錯在一個地方-“ 111”,因為名稱必須是字符串。 因此,@ NarayanP的代碼無法在android系統上運行。
您的代碼引發異常,這不是json的錯誤。 問題在任務欄中;
String json = "...";
如果您通過http響應或文件讀取將以下值放入json中
"data": "0\u00181535480381\u00191535480347\u0018\"voyager\";-1;12;0\u00181535480075\u00191535480069"
那么實際上json的值將是
data: 015354803811535480347"voyager";-1;12;015354800751535480069 [escaped \u0018 etc. by stackoverflow]
如果JSON字符串包含分號,則僅返回直到遇到的第一個分號為止的字符串部分。 因此,在解析上方的json字符串時,數據項將與
015354803811535480347"voyager"
那么“ -1”,“ 12”是JSON語法錯誤。
以下是沒有錯誤的完整代碼。
String json = "[{\n" +
" \"response\": {\n" +
" \"client\": \"123456\",\n" +
" \"varname111\": {\n" +
" \"data\": \"0\\u00181535480381\\u00191535480347\\u0018\\\"voyager\\\";-1;12;0\\u00181535480075\\u00191535480069\",\n" +
" \"time\": \"981542121421\"\n" +
" }\n" +
" }\n" +
"}]";
JSONArray jsonArray = null;
try {
jsonArray= new JSONArray(json);
} catch (Exception e) {
e.printStackTrace();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.