通过JsonOjbect处理json串中的内容
1.通过JsonOjbect处理json串中的内容
需求:后台返回了一个json格式的字符串,发现data键对应的值为数组,数组中第三个数组数据错误,要求为前两个数组的对应元素相除为第三个数组中的内容。
package com.neusoft.nhip.neubi.dashboard.mobileBI;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class JsonTest {
public static String formatDouble4(double d) {
DecimalFormat df = new DecimalFormat("#.00");
return df.format(d*100);
}
/**
* 除法
*
* @param d1
* @param d2
* @param len
* @return
*/
public static double div(String d1, String d2, int len) {
BigDecimal b1 = new BigDecimal(d1);
BigDecimal b2 = new BigDecimal(d2);
if (b2.compareTo(BigDecimal.ZERO) == 0) {
return 0.0;
}
return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static void main(String[] args) {
String result = "{ \"name\": \"入组数-变异数-变异率\", \"data\": [ [ [ \"脑病科(住院)\", \"内分泌科(住院)\", \"心血管科(住院)\" ],[572.0,490.0,472.0 ],[70.0,62.0,54.0 ],[1.0,2.0,3.0 ] ]],\"success\": true}";
//System.out.println(result);
JsonObject jsonObject = (JsonObject) new JsonParser().parse(result);
String jsonstr = jsonObject.toString();
JsonArray dataEle = (JsonArray) jsonObject.get("data");
JsonArray arrList = (JsonArray) dataEle.get(0);
JsonArray denArr = (JsonArray) arrList.get(1);
JsonArray numArr = (JsonArray) arrList.get(2);
JsonArray ratArr = (JsonArray) arrList.get(3);
//System.out.println(denArr);
//System.out.println(numArr);
int len = denArr.size();
JsonParser jsonParser = new JsonParser();
for(int i = 0; i < len; i++) {
//Double den = Double.parseDouble(denArr.get(i).toString());
//Double num = Double.parseDouble(numArr.get(i).toString());
String den = denArr.get(i).toString();
String num = numArr.get(i).toString();
Double ration = div(num, den, 4) * 100;
//ration = formatDouble4(num/den);
JsonElement jsonElement = jsonParser.parse(ration.toString());
ratArr.set(i, jsonElement);
}
/*Iterator it = dataEle.iterator();
while(it.hasNext()) {
System.out.println(it.next());
};*/
System.out.println(jsonObject.toString());
}
}