我从String变量中的restful api获取数据现在我想转换为JSON对象但是我遇到问题而转换它会引发异常。这是我的代码:
URL url = new URL("SOME URL");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
JSONObject jObject = new JSONObject(output);
String projecname=(String) jObject.get("name");
System.out.print(projecname);
我的字符串包含
{"data":{"name":"New Product","id":1,"description":"","is_active":true,"parent":{"id":0,"name":"All Projects"}}}
这是我在json中想要的字符串,但它在线程“main”
中显示了Exceptionjava.lang.NullPointerException
at java.io.StringReader.<init>(Unknown Source)
at org.json.JSONTokener.<init>(JSONTokener.java:83)
at org.json.JSONObject.<init>(JSONObject.java:310)
at Main.main(Main.java:37)
答案 0 :(得分:27)
name
中存在data
。您需要分层解析JSON才能正确获取数据。
JSONObject jObject = new JSONObject(output); // json
JSONObject data = jObject.getJSONObject("data"); // get data object
String projectname = data.getString("name"); // get the name from data.
注意:此示例使用的是org.json.JSONObject
类,而不是org.json.simple.JSONObject
。
正如“Matthew”在评论中提到他正在使用org.json.simple.JSONObject
,我在答案中添加了我的评论细节。
尝试使用
org.json.JSONObject
代替。但是如果你不能改变你的JSON库,你可以refer to this example使用与你相同的库,并检查如何从中读取json部分。
提供的链接示例:
JSONObject jsonObject = (JSONObject) obj;
String name = (String) jsonObject.get("name");
答案 1 :(得分:2)
您可以使用ObjectMapper将java对象转换为json字符串
,而不是JSONObjectObjectMapper mapper = new ObjectMapper();
String requestBean = mapper.writeValueAsString(yourObject);
答案 2 :(得分:2)
您正在获取NullPointerException,因为while循环结束时“output”为null。您可以在某个缓冲区中收集输出,然后使用它,如下所示 -
StringBuilder buffer = new StringBuilder();
String output;
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println(output);
buffer.append(output);
}
output = buffer.toString(); // now you have the output
conn.disconnect();
答案 3 :(得分:1)
使用ObjectMapper对象将String转换为JsonNode:
double NumberToRound1 = 10.5234;
double NumberToRound2 = 4.3014;
//You can use Math.Round as follow
Math.Round(NumberToRound1, 2);
Math.Round(NumberToRound2, 2);