Java JSON POST格式不正确

时间:2018-10-11 04:17:43

标签: java json http

我正在尝试创建一种方法,该方法将在给定URL和JSONArray的情况下发送POST请求。该代码的摘录如下:

        URL url = new URL("https://jsonplaceholder.typicode.com/posts");
        JSONObject obj = new JSONObject();
        obj.put("id", -12);
        obj.put("title", "titlevalue");
        obj.put("body", "bodyvalue");
        JSONArray arr = new JSONArray("[" + obj + "]");

        con = (HttpURLConnection) url.openConnection();
        con.setDoOutput(true);
        con.setRequestMethod("POST");
        con.setRequestProperty("Accept", "application/json");
        con.setRequestProperty("charset", "utf-8");

        System.out.println(arr.toString());

        OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream(), "UTF-8");
        wr.write(arr.toString());
        wr.flush();
        wr.close();

        if (con.getResponseCode() != 201) // make sure request is successful
            throw new Exception("Error code " + con.getResponseCode());

        String str = new Scanner(con.getInputStream(), "UTF-8").useDelimiter("\\Z").next();
        System.out.println(str);

第一个打印语句显示我的输入格式正确

[{
    "id": -12,
    "title": "titlevalue",
    "body": "bodyvalue"
}]

这就是我想要的方式,但是在写入输出流后,第二个打印语句向我表明,它完全没有正确设置为JSON格式,整个位置都有怪异的转义字符,并且没有选择键/值对。

{
    "[{\"id\":-12,\"title\":\"titlevalue\",\"body\":\"bodyvalue\"}]": "",
    "id": 101
}

开机自检期间我做错了什么吗?

3 个答案:

答案 0 :(得分:1)

我认为您的问题可能就在这里:

 JSONArray arr = new JSONArray("[" + obj + "]");

我怀疑此时obj已转换为字符串,而您的JSONArray仅包含一个字符串。也就是说,"[" + obj + "]"具有调用obj.toString()并创建传递给构造函数的单个字符串的作用。

这意味着当您将其写入时,单个字符串的嵌入引号已转义。 System.out.println(arr.toString());实际上是误导的。您尚未按预期设置对象。

解决方案可能很简单:

--- JSONArray arr =新的JSONArray(obj); ---

JSONArray arr = new JSONArray();
arr.put(obj);

答案 1 :(得分:1)

尝试以下方法:

JSONObject obj = new JSONObject();
obj.put("id", -12);
obj.put("title", "titlevalue");
obj.put("body", "bodyvalue");
JSONArray arr = new JSONArray();
arr.put(obj);

说明:正如Dave所解释的那样,将字符串用“ [”和“]”括起来,以引入转义字符。而是将创建的对象放入数组中。更好的方法是使用GSON或JACKSON进行解析,您可以轻松地在Internet上找到教程。

答案 2 :(得分:0)

我建议您使用GSON库,它非常简单,可以将任何Java对象转换为JSON字符串。

Gson gson = new Gson()
String json = gson.toJson(myObject);