3 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
在 voyager 周圍放置 esacpe 字符,如下所示。
\\\"voyager\\\"
我測(cè)試它有效。
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);
}
}
由于它已經(jīng)在 JOSN 中轉(zhuǎn)義了字符,因此您需要在 Java 中雙重轉(zhuǎn)義以保留它們。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
《航海者》
這需要雙重轉(zhuǎn)義。解析器將\"
視為引用的結(jié)尾并期望,
或}
嘗試
\\\"voyager\\\"

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊
在 JSON 語法中,您錯(cuò)了一個(gè)地方 - “111”,因?yàn)槊Q必須是字符串。因此,@NarayanP 的代碼不會(huì)在 android 系統(tǒng)上運(yùn)行。
您的代碼拋出異常,這不是 json 的錯(cuò)誤。問題出在分配線上;
String json = "...";
如果您通過 http 響應(yīng)或文件讀取將以下值放入json
"data": "0\u00181535480381\u00191535480347\u0018\"voyager\";-1;12;0\u00181535480075\u00191535480069"
那么實(shí)際上json的值將是
data: 015354803811535480347"voyager";-1;12;015354800751535480069 [escaped \u0018 etc. by stackoverflow]
如果 JSON 字符串包含分號(hào),則僅返回在遇到第一個(gè)分號(hào)之前的字符串部分。因此,在解析上層 json 字符串時(shí),數(shù)據(jù)項(xiàng)將與
015354803811535480347"voyager"
那么“-1”、“12”是 JSON 語法錯(cuò)誤。
以下是沒有錯(cuò)誤的完整代碼。
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();
}
添加回答
舉報(bào)