3 回答
TA贡献1830条经验 获得超3个赞
在 voyager 周围放置 esacpe 字符,如下所示。
\\\"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 中双重转义以保留它们。
TA贡献1834条经验 获得超8个赞
在 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();
}
添加回答
举报