为了账号安全,请及时绑定邮箱和手机立即绑定

Java JSON POST 格式不正确

Java JSON POST 格式不正确

慕娘9325324 2021-11-11 14:18:06
我正在尝试创建一种方法,该方法将发送给定 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 期间做错了什么吗?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

试试下面:


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


查看完整回答
反对 回复 2021-11-11
?
暮色呼如

TA贡献1853条经验 获得超9个赞

我认为您的问题可能出在以下方面:

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

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

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

解决方案可能很简单:

JSONArray arr = new JSONArray();

arr.put(obj);


查看完整回答
反对 回复 2021-11-11
?
慕斯709654

TA贡献1840条经验 获得超5个赞

我建议您使用 GSON 库,它非常容易将任何 java 对象转换为 JSON 字符串。


Gson gson = new Gson()

String json = gson.toJson(myObject);


查看完整回答
反对 回复 2021-11-11
  • 3 回答
  • 0 关注
  • 283 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信