Java JSON POST格式不正确
我试图创建一个方法,在给定url和JSONArray的情况下发送POST请求。该守则摘录如下:Java JSON POST格式不正确,java,json,http,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("b
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);
第一个print语句显示输入的格式正确
[{
"id": -12,
"title": "titlevalue",
"body": "bodyvalue"
}]
这就是我想要它的方式,但是在写入outputstream之后,第二个print语句告诉我它的JSON格式根本不正确,整个过程中都有奇怪的转义字符,并且它没有拾取键/值对
{
"[{\"id\":-12,\"title\":\"titlevalue\",\"body\":\"bodyvalue\"}]": "",
"id": 101
}
我在文章中是否做错了什么?我建议您使用GSON库,它非常简单,可以将任何java对象转换为JSON字符串
Gson gson = new Gson()
String json = gson.toJson(myObject);
我建议您使用GSON库,它非常简单,可以将任何java对象转换为JSON字符串
Gson gson = new Gson()
String json = gson.toJson(myObject);
我认为你的问题可能在于:
JSONArray arr = new JSONArray("[" + obj + "]");
我怀疑此时obj
被转换为字符串,而您的JSONArray
只包含一个字符串。也就是说,“[”+obj+“]”
具有调用obj.toString()
并创建传递给构造函数的单个字符串的效果
这意味着,当您将其写出时,单个字符串中嵌入的引号将被转义。System.out.println(arr.toString())代码>实际上具有误导性。您没有按预期设置对象
解决方案可能非常简单:
---JSONArray arr=新JSONArray(obj)---
我认为你的问题可能在于:
JSONArray arr = new JSONArray("[" + obj + "]");
我怀疑此时obj
被转换为字符串,而您的JSONArray
只包含一个字符串。也就是说,“[”+obj+“]”
具有调用obj.toString()
并创建传递给构造函数的单个字符串的效果
这意味着,当您将其写出时,单个字符串中嵌入的引号将被转义。System.out.println(arr.toString())代码>实际上具有误导性。您没有按预期设置对象
解决方案可能非常简单:
---JSONArray arr=新JSONArray(obj)---
请尝试以下内容:
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上轻松找到教程。尝试以下方法:
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上轻松找到教程。请解释一下为什么GSON?GSON是一个相当简单的库,它可以自动检测类的结构(本身就是映射、列表、集),所有这些都可以表示为JSON。GSON支持每一个java对象在一行代码中将其转换为JSON,这样就不那么麻烦了。您能解释一下为什么GSON吗?GSON是一个相当简单的库,它可以自动检测类的结构(本身就是映射、列表、集),所有这些都可以表示为JSON。GSON支持每一个java对象在一行代码中将其转换为JSON,这样就不那么麻烦了。我明白了你所说的转义嵌入引号的意思,我之所以这样做是因为JSONArray不接受JSONObject作为参数,也不允许字符串不以方括号开头,因此,我在开头和结尾添加了两个方括号,以确保在构建JSONArray时它是有效的。我试过做你的编辑,也试过obj.toString,但它给了我“必须以“[”开头”的提示错误。为了尝试,我尝试更改它,以便编写JSONObject而不是JSONArray,但出现了相同的奇怪格式。我无法测试可能的解决方案。请通读。这对构造函数参数有一些见解。我明白了转义嵌入引号的意思,这就是我这么做的原因我这样做是因为JSONArray不接受JSONObject作为参数,也不允许字符串不以方括号开头,所以我在开头和结尾添加了两个方括号,以确保在构建JSONArray时它是有效的。我尝试了编辑,也尝试了obj.toString,但它给了我“必须以“[]”错误开头。为了进行尝试,我尝试更改它,以便写入JSONObject而不是JSONArray,但出现了相同的奇怪格式。我无法测试可能的解决方案。请通读。这对构造函数参数有一定的了解。