Java JSON POST 格式不正确

标签 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
}

我在 POST 过程中做错了什么吗?

最佳答案

尝试以下:

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

关于Java JSON POST 格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52752124/

相关文章:

java - 如何在自定义 JPanel 中移动 Sprite ?

objective-c - hasBytesAvailable 提前完成

html - 普通网站如何开启https协议(protocol)?

python - 使用 urllib2 或任何其他 http 库读取超时

java - 使用 POJO 作为 iReport 数据源

java - 如何在Android中使用Animation从中心慢慢填充圆圈的背景颜色

java - 通过程序配置ServiceNow

json - 解码到 map[string]interface{} 后对 ma[string][]string 的类型断言失败

json - Arduino API 和 Json 向 azure 发送信息

http - http-header "X-XSS-Protection"是什么?