背景:得到的接口返回的字符串中一个字符串类型的数据内还有object类型,如何解析成列在列表中?
接口返回数据:
{
"agentRunId":10697,
"applicationId":76,
"errorId":124,
"exceptionClass":"org.springframework.web.util.NestedServletException",
"message":"Request processing failed; nested exception is java.lang.NullPointerException",
"params":"{\"custom_params\":{\"http_status\":500,\"thread_name\":\"http-bio-8090-exec-6\"},\"request_referer\":\"http://localhost:8090/tpm/account/2/alerts/policyApp\",\"request_uri\":\"/tpm/account/2/dashboard/29/overview\",\"stack_trace\":[\"\\torg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)\",\"\\torg.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)\",\"\\tjavax.servlet.http.HttpServlet.service(HttpServlet.java:620)\",\"\\tjavax.servlet.http.HttpServlet.service(HttpServlet.java:727)\",。。省略。。,\"\\tjava.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)\",\"\\tjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)\",\"\\tjava.lang.Thread.run(Thread.java:695)\"]}",
"path":"WebTransaction/SpringController/DashboardShowController/dashboardView",
"startTime":"2014-09-22 14:56:22",
"userId":0
}
"params":就是一个字符串类型,但是里面包含很多Object
解析方法:
<span style="font-size:14px;">public class JsonDemo {
public static void main(String[] args) {
String data = sendGet("http://115.28.189.59/json.html", "utf-8");//接口地址,返回接口数据
JSONObject jsonObject = new JSONObject(data); //反序列化
// int angentRunId=jsonObject.getInt("agentRunId");
// int applicationId=jsonObject.getInt("applicationId");
// int errorId=jsonObject.getInt("errorId");
String exceptionClass=jsonObject.getString("exceptionClass");//excrption
String message=jsonObject.getString("message");//错误信息
String params = jsonObject.getString("params");//获取params对应的字符串
String path = jsonObject.getString("path");//path
String startTime = jsonObject.getString("startTime");//时间
JSONObject paraJsonObject = new JSONObject(params);//params字符串
JSONObject cp = paraJsonObject.getJSONObject("custom_params");//获取object数据,达到目的
//自定义参数
String[] names = JSONObject.getNames(cp);//Android使用:JSONArray names = defineJsonObject.names();
//自定义参数
for (int i = 0; i < names.length; i++) {
System.out.println(names[i]+":"+cp.get(names[i]));
}
//请求参数
System.out.println("request_referer:"+paraJsonObject.get("request_referer"));
System.out.println("request_uri:"+paraJsonObject.get("request_uri"));
//stack traces
JSONArray trace = paraJsonObject.getJSONArray("stack_trace");
for (int i = 0; i < trace.length(); i++) {
System.out.println(trace.get(i));
}
}</span>
//获取接口返回数据,方法不一
public static String sendGet(String url, String charset) {
String result = "";
BufferedReader in = null;
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
// String userAgent = System.getProperty("http.agent");
// connection.setRequestProperty("user-agent", userAgent);
connection.setConnectTimeout(1000 * 10);
// 建立实际的连接
connection.connect();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream(), charset));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
result = "";
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
// System.out.println(result);
return result;
}
}