无法将String转换为JSONObject

时间:2017-10-29 05:51:19

标签: java

我正在获取输入流并将其转换为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中是完全新的

4 个答案:

答案 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);