话不多说直接上代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import net.sf.json.*;
import net.sf.json.util.JSONTokener;
public class JSONOpr {
public static void main(String[] args){
HashMap<Object,Object> head = new HashMap<Object,Object>();
head.put("a", "kkk");
head.put("b", 111);
head.put("c", 125.10);
HashMap<Object,Object> body = new HashMap<Object,Object>();
ArrayList<Object> mx = new ArrayList<Object>();
HashMap<Object,Object> mx1 = new HashMap<Object,Object>();
HashMap<Object,Object> mx2 = new HashMap<Object,Object>();
mx1.put("aaa", "aaa");
mx1.put("bbb", 123.00);
mx2.put("ccc", 555);
mx2.put("ddd", 521.302);
mx.add(mx1);
mx.add(mx2);
body.put("mx", mx);
JSONObject srcJ = new JSONObject();
srcJ.put("head", head);
srcJ.put("body", body);
System.out.println(srcJ.toString());
System.out.println(setCash(srcJ.toString()));
}
public static String setCash(String str){
//将字符串转换为Object对象 判断是否为数组
Object json = new JSONTokener(str).nextValue();
if(json instanceof JSONObject){
JSONObject srcJ = JSONObject.fromObject(json);
Iterator iterator = srcJ.keys();
String key = "";
Object je = null;
String data = "";
Object objD = null;
while(iterator.hasNext()){
key = (String) iterator.next();
//这里判断是否为数字 我是用key中有je字段来判断是否为数字的
je = srcJ.get(key);
data = srcJ.getString(key);
if(je instanceof Number ){
srcJ.put(key, data);
}
objD = new JSONTokener(data).nextValue();
if(objD instanceof JSONObject||objD instanceof JSONArray){
srcJ.put(key, setCash(data));
}
}
return srcJ.toString();
}else if(json instanceof JSONArray){
JSONArray srcJ = JSONArray.fromObject(json);
JSONArray retJ =new JSONArray();
for(int i =0;i<srcJ.size();i++){
JSONObject jsono = srcJ.getJSONObject(i);
retJ.add(setCash(jsono.toString()));
}
return retJ.toString();
}else{
return str;
}
}
}
结果
{"head":{"a":"kkk","b":111,"c":125.1},"body":{"mx":[{"aaa":"aaa","bbb":123},{"ccc":555,"ddd":521.302}]}}
{"head":{"a":"kkk","b":"111","c":"125.1"},"body":{"mx":[{"aaa":"aaa","bbb":"123"},{"ccc":"555","ddd":"521.302"}]}}
这里有两个问题
- 他把我加的小数点后面的零给规格化了 删了 可以试试https://blog.csdn.net/CallmeZhe/article/details/112252052
- 本文中代码采用了递归的思想 ,会存在递归深度限制及内存消耗等问题