我正在获取输入流并将其转换为String
然后转换为JSONObject
下面是将输入流转换为String然后转换为JSONObject的片段。
但转换为json对象(第6行)后,我只得到第一个object
而不是所有objects
您能告诉我为什么我只获得一个对象而不是所有n 对象
InputStream in = new BufferedInputStream(conn.getInputStream());
String result = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
int i =result.indexOf("{");
String forResult=result.substring(i);
System.out.println(forResult); // Result 1
JSONObject jsonObject = new JSONObject(forResult); // Line 6
System.out.println(jsonObject); // Result 2
将其转换为String后,它看起来像这样
结果-1
{
"test_expr":"",
"val_expr":"someVale",
"val_advanced":true,
"machine_val":null
}, {...// n times}
结果2 - 仅第一个对象
{
"test_expr":"",
"val_expr":"someVale",
"val_advanced":true,
"machine_val":null
}
谢谢,请承担我的无知,因为我在java中是完全新的
答案 0 :(得分:0)
因为你的json无效。JSONObject
之间有一个逗号。
改为此。
{
{
"test_expr":"",
"val_expr":"someVale",
"val_advanced":true,
"machine_val":null
},
{
"test_expr":"",
"val_expr":"someVale",
"val_advanced":true,
"machine_val":null
}
...
}
或
[
{
"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));
}
所以包含对象的JSON编码字符串(如{})。
// make sure that you result contain {}
result = "{your data here}"
JSONObject json_data = new JSONObject(result);
如果您使用JSONArray
,则应在JSON
result = "[json data]";
JSONArray jsonArray = new JSONArray(result);
答案 1 :(得分:0)
好吧,多个jsons的连接不是有效的json。你的解析库应该拒绝这样的输入,但它似乎只是在有效对象的末尾停止了。
您可以将列表包装成数组:[{...},{...},{...}]。然后解析器将能够正确地将其解释为数组。
答案 2 :(得分:0)
我猜你得到的是JSONArray对象而不是JSONObject。为什么需要得到结果的子字符串? Json数组可以以[。查看JSONObject和JSONArray之间的区别。 Difference between JSONObject and JSONArray
答案 3 :(得分:0)
感谢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);