Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用org.json库解析json数组?_Java_Json_String_Org.json - Fatal编程技术网

Java 无法使用org.json库解析json数组?

Java 无法使用org.json库解析json数组?,java,json,string,org.json,Java,Json,String,Org.json,我有一个下面的JSON数组,我正在尝试解析它,但它给了我一个异常: [{ "response": { "client": "123456", "111": { "data": "0\u00181535480381\u00191535480347\u0018\"voyager\";-1;12;0\u00181535480075\u00191535480069", "time": "981542121421"

我有一个下面的JSON数组,我正在尝试解析它,但它给了我一个异常:

[{
    "response": {
        "client": "123456",
        "111": {
            "data": "0\u00181535480381\u00191535480347\u0018\"voyager\";-1;12;0\u00181535480075\u00191535480069",
            "time": "981542121421"
        }
    }
}]
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);
我正在使用
org.json.JSONArray
解析上面的json,但下面的代码抛出异常:

[{
    "response": {
        "client": "123456",
        "111": {
            "data": "0\u00181535480381\u00191535480347\u0018\"voyager\";-1;12;0\u00181535480075\u00191535480069",
            "time": "981542121421"
        }
    }
}]
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)
线程“main”org.json.JSONException中的异常:字符81处应为“,”或“}” 位于org.json.JSONTokener.syntaxError(JSONTokener.java:410) 位于org.json.JSONObject(JSONObject.java:222) 位于org.json.JSONTokener.nextValue(JSONTokener.java:344) 位于org.json.JSONObject(JSONObject.java:205) 位于org.json.JSONTokener.nextValue(JSONTokener.java:344) 位于org.json.JSONObject(JSONObject.java:205) 位于org.json.JSONTokener.nextValue(JSONTokener.java:344) 位于org.json.JSONArray(JSONArray.java:125) 位于org.json.JSONArray(JSONArray.java:157)
我在这里怎么了?

在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中加倍转义以保留它们

“旅行者”

这需要双重转义。解析器将
\“
视为引号的结尾,并期望
}

试一试

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

数据
字段中有一些Unicode字符。我猜这与此有关。我认为这与我的json中的双引号字符串
voyager
有关。但是这些引号是正确转义的,带有反斜杠。你可以通过删除它们来测试这一点,看看会发生什么。是的,一旦我删除双引号在voyager周围搜索,然后它可以正常工作,没有任何问题,所以有些奇怪。您的原始文本似乎对我来说解析得很好()。我不知道是怎么回事。您还需要转义所有
\
字符,例如
\u
变成
\\u