不使用fastjson,而是使用unirest自身的jsonnode去解析
获取结果代码
private HttpResponse<JsonNode> getResponseFromApiByGood(){
//去拿cookies
CookieHandler cookieManager = CookieHandler.getDefault();
Map<String, List<String>> result = null;
try {
result = cookieManager.get(new URI("https://xxxxxx"), new HashMap<>());
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
java.util.List cookies = result.get("Cookie");
cookie = (String) cookies.get(0);
try {
Map<String,String> headers=new HashMap<>();
headers.put("accept","application/json, text/plain, */*");
headers.put("accept","application/json, text/plain, */*");
headers.put("accept-encoding","gzip, deflate, br");
headers.put("accept-language","zh-CN,zh;q=0.9");
headers.put("accept-language","zh-CN,zh;q=0.9");
//使用cookies
headers.put("cookie",cookie);
res = Unirest.get("https://xxxxx")
.headers(headers)
.asJson();
System.out.println(res.getBody().toString());
} catch (UnirestException e) {
e.printStackTrace();
}
return res;
}
解析
asString解析
如果Unirest使用的是asString,比如singleResBody是结果
private String parseJsonRes(String field){
com.alibaba.fastjson.JSONObject itemObject = JSON.parseObject(singleResBody.getObject().toString());
com.alibaba.fastjson.JSONObject dataJsonObj = (JSONObject) itemObject.get("data");
return dataJsonObj.get(field).toString();
}
使用
public String getProblemDetail() {
return parseJsonRes("name");
}
asJson解析
如果Unirest使用的是asJson,比如singleResBody是结果
HttpResponse<JsonNode> pageOneTask = getResponseFromApi(1, "xxxx");
JsonNode resBody1 = pageOneTask.getBody();
JSONObject resObject1 = resBody1.getObject();
本来是obj,我们强转为字符或者JSONObject 即可
String re=resObject1.get("success");
System.out.println("success:"+re);
JSONObject dat=resObject1.get("data");
System.out.println("pageVO:"+dat.get("pageVO"));
其他
{
"code": 200,
"message": "Success",
"success": true,
"data":{
"result":["cc":"dd","cc1":"dd1"]
}
}
常用到的字符串转jsonArray,以上面示例为例data下面的result就应该通过下面的形式解析parseArray
JSONArray taskArray = JSON.parseArray(resultObject.toString());
常用到的字符串转jsonObject,如果是解析整个结果格式是json格式的,就应该是parseObject
com.alibaba.fastjson.JSONObject itemObjectt = JSON.parseObject(taskArray.get(ii).toString());
举例
如要获取creationDate的值
{
“code”: 200,
“data”: {
“pageVO”: {
“totalRows”: 2357,
“curPage”: 2,
“pageSize”: 20,
“resultMode”: 0,
“startIndex”: 21,
“endIndex”: 40,
“orderBy”: null,
“filterStr”: null,
“totalPages”: 118
},
“result”: [
{
“creationDate”: “2024-04-28 10:45:42”,
HttpResponse<JsonNode> re = getPageContentByPage();
JsonNode reJson = re.getBody();
JSONArray reArray = reJson.getObject().getJSONObject("data").getJSONArray("result");
int reSize = reArray.length();
System.out.println(reSize+"");
List<String> mainInfo=new ArrayList<>();
for (int i=0;i<reSize;i++){
String neededStr="";
JSONObject item = (JSONObject) reArray.get(i);
System.out.println(item.get("creationDate"));
}
}