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