Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 无法将字符串转换为JSONObject_Java - Fatal编程技术网

Java 无法将字符串转换为JSONObject

Java 无法将字符串转换为JSONObject,java,Java,我正在获取一个inputstream并将其转换为String,然后再转换为JSONObject 下面是将inputstream转换为字符串然后再转换为JSONObject的代码段 但是在转换为json对象(第6行)之后,我只得到第一个对象,而不是所有的对象 你能告诉我为什么我只得到一个对象而不是所有的n个对象吗 将其转换为字符串后,它看起来如下所示 结果-1 结果-2-仅第一个对象 谢谢,请原谅我的无知,因为我对java完全陌生,因为您的json无效。JSONObject之间有一个逗号 换成这个

我正在获取一个inputstream并将其转换为
String
,然后再转换为
JSONObject

下面是将inputstream转换为字符串然后再转换为JSONObject的代码段

但是在转换为json对象(第6行)之后,我只得到第一个
对象
,而不是所有的
对象

你能告诉我为什么我只得到一个对象而不是所有的n个对象吗

将其转换为字符串后,它看起来如下所示

结果-1

结果-2-仅第一个对象


谢谢,请原谅我的无知,因为我对java完全陌生,因为您的json无效。
JSONObject
之间有一个逗号

换成这个

{
    {
    "test_expr":"",
    "val_expr":"someVale",
    "val_advanced":true,
    "machine_val":null
    },
    {
    "test_expr":"",
    "val_expr":"someVale",
    "val_advanced":true,
    "machine_val":null
    }
    ...
}

JSONObject的源代码

/**
 * Creates a new {@code JSONObject} with name/value mappings from the JSON
 * string.
 *
 * @param json a JSON-encoded string containing an object.
 * @throws JSONException if the parse fails or doesn't yield a {@code
 *     JSONObject}.
 */
public JSONObject(String json) throws JSONException {
    this(new JSONTokener(json));
}
result = "[json data]";
JSONArray jsonArray = new JSONArray(result);
因此是一个包含对象(如{})的JSON编码字符串。

// make sure that you result contain {}
result = "{your data here}"
JSONObject json_data = new JSONObject(result);
如果使用
JSONArray
,则在
JSON

/**
 * Creates a new {@code JSONObject} with name/value mappings from the JSON
 * string.
 *
 * @param json a JSON-encoded string containing an object.
 * @throws JSONException if the parse fails or doesn't yield a {@code
 *     JSONObject}.
 */
public JSONObject(String json) throws JSONException {
    this(new JSONTokener(json));
}
result = "[json data]";
JSONArray jsonArray = new JSONArray(result);

好吧,多个json的串联不是有效的json。您的解析库应该拒绝这样的输入,但它似乎只是在有效对象的末尾停止


您可以将列表包装成一个数组:[{…},{…},{…}]。然后解析器将能够正确地将其解释为数组。

我猜您得到的是JSONArray对象而不是JSONObject。为什么需要获取结果的子字符串?Json数组可以以[]开头。请查看JSONObject和JSONArray之间的区别。

多亏了Sotirios Delimanolis

我能够通过使用JSONParser解决这个问题

InputStream in = new BufferedInputStream(conn.getInputStream());
        String result = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
        JSONParser parser = new JSONParser();
        org.json.simple.JSONArray modelArrary =(org.json.simple.JSONArray) parser.parse(result) ;
        System.out.println(modelArrary);

JSONObject
将不会进一步解析包含的
}
。流中的内容是JSON数组吗?为什么要使用子字符串?@SotiriosDelimanolis使用
org.apache.commons.io.IOUtils.toString(在“UTF-8”中)转换后,它看起来像这样[{…},{…}]
好的,这是一个JSON数组。使用
JSONArray
来解析它。如果他们的JSON无效,那么可能重复的
JSONObject
将无法解析它。而且你的第一个片段实际上是无效的。请在发布之前验证你的答案。我还注意到,你答案的最后一部分是另一个最近答案的副本你的。如果两个问题的答案相同,它们应该被认为是重复的,你应该投票关闭它们。你有权使用该特权,使用它。我使用特权。
JSONObject
之间有一个逗号。不好吗?@SotiriosDelimanolis
result = "[json data]";
JSONArray jsonArray = new JSONArray(result);
InputStream in = new BufferedInputStream(conn.getInputStream());
        String result = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
        JSONParser parser = new JSONParser();
        org.json.simple.JSONArray modelArrary =(org.json.simple.JSONArray) parser.parse(result) ;
        System.out.println(modelArrary);