猿问

Java JSON POST 格式不正确

我正在尝试创建一种方法,该方法将发送给定 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

}

我在 POST 期间做错了什么吗?


慕娘9325324
浏览 284回答 3
3回答

富国沪深

试试下面: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 进行解析,您可以在互联网上轻松找到教程。

暮色呼如

我认为您的问题可能出在以下方面: JSONArray arr = new JSONArray("[" + obj + "]");我怀疑此时obj已转换为字符串,而您JSONArray只包含一个字符串。也就是说,"[" + obj + "]"具有调用obj.toString()和创建传递给构造函数的单个字符串的效果。这意味着当您将其写出时,单个字符串会转义嵌入的引号。该System.out.println(arr.toString());实际上是误导。您没有按预期设置对象。解决方案可能很简单:JSONArray arr = new JSONArray();arr.put(obj);

慕斯709654

我建议您使用 GSON 库,它非常容易将任何 java 对象转换为 JSON 字符串。Gson gson = new Gson()String json = gson.toJson(myObject);
随时随地看视频慕课网APP

相关分类

Java
我要回答