FastJson转化

导入fastJson包(下载地址:https://mvnrepository.com/artifact/com.alibaba/fastjson) fastJson有序化问题 JSON对象一般都是以key : value 的形式存储,类似于java中的Map,hashMap 在结构上 是数组加链表,进行哈希取模的时候无法保证顺序,而LinkedHashMap 是可以保证顺序的。 一般来说,我们使用JSON  一般都只是转为JSON对象,并没有要求,所以一般是使用下面方法

JSONObject jsonObject = JSON.parseObject(json);

但是我们现在要有序,只需要加入一个Feature 标志就行

JSONObject jsonObject = JSON.parseObject(json, Feature.OrderedField);

新建json对象时,有序写法

JSONObject jsonObject = new JSONObject(true);

循环遍历有序获取

JSONArray excelArray = JSON.parseArray(excelString);
for(int i=0;i<excelArray.size();i++){

    //方法一---无序
    /*JSONObject jsonObject = excelArray.getJSONObject(i);
    for(Map.Entry entry : jsonObject.entrySet()){
        String key = entry.getKey();
        Object value = entry.getValue();
        System.out.println("key:::"+key);
        System.out.println("value:::"+value.toString());
    }*/
    //方法二---有序
    LinkedHashMap jsonMap =  
        JSON.parseObject(excelArray.get(i).toString(),new TypeReference<LinkedHashMap>(){});
    for (Map.Entry entry : jsonMap.entrySet()) {

        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

附一段,能不能看懂随缘

import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;


public class TestJson {
    public static void main(String\\\[\\\] args) {

        testJSON();
    }
    public static String testJSON() {
        String jsonString1 = "\\\[{\\\"cb\\\":\\\"system\\\",\\\"cbName\\\":\\\"system\\\",\\\"ct\\\":\\\"2020-08-04 17:57:56\\\",\\\"dataId\\\":\\\"0\\\",\\\"name\\\":\\\"测试中午hasda.js\\\",\\\"newAdd\\\":true,\\\"nodeId\\\":\\\"node1\\\",\\\"nodeName\\\":\\\"新节点1\\\",\\\"oid\\\":\\\"5741ca76-38e3-4787-af88-383761b53191\\\"},{\\\"cb\\\":\\\"root\\\",\\\"cbName\\\":\\\"系统管理员root\\\",\\\"ct\\\":\\\"2020-08-04 17:58:57\\\",\\\"dataId\\\":\\\"2\\\",\\\"name\\\":\\\"run.xlsx\\\",\\\"newAdd\\\":true,\\\"nodeId\\\":\\\"node4\\\",\\\"nodeName\\\":\\\"二线处理\\\",\\\"oid\\\":\\\"c50c0ea3-dd85-4bbd-8ed3-e41f564c0610\\\"}\\\]";
        String jsonString2 = "\\\[{\\\"ACTIONID\\\":\\\"act12\\\",\\\"ACTIONNAME\\\":\\\"新建业务协作工单\\\",\\\"CREATETIME\\\":\\\"2020-08-04 17:57:57.0\\\",\\\"ID\\\":\\\"1518962\\\",\\\"NAME\\\":\\\"业务协作平台\\\",\\\"NODEID\\\":\\\"node1\\\",\\\"NODENAME\\\":\\\"新节点1\\\",\\\"TASKDATAID\\\":\\\"0\\\",\\\"TASKOID\\\":\\\"148169\\\"},{\\\"ACTIONID\\\":\\\"act4\\\",\\\"ACTIONNAME\\\":\\\"提交一线审核\\\",\\\"CREATETIME\\\":\\\"2020-08-04 17:59:08.0\\\",\\\"DEALEDIDEA\\\":\\\"123123123\\\",\\\"ID\\\":\\\"1518963\\\",\\\"NAME\\\":\\\"系统管理员root\\\",\\\"NODEID\\\":\\\"node4\\\",\\\"NODENAME\\\":\\\"二线处理\\\",\\\"TASKDATAID\\\":\\\"2\\\",\\\"TASKOID\\\":\\\"148169\\\"},{\\\"ACTIONID\\\":\\\"act17\\\",\\\"ACTIONNAME\\\":\\\"回退二线\\\",\\\"CREATETIME\\\":\\\"2020-08-04 19:17:29.0\\\",\\\"DEALEDIDEA\\\":\\\"1\\\",\\\"ID\\\":\\\"1518965\\\",\\\"NAME\\\":\\\"系统管理员root\\\",\\\"NODEID\\\":\\\"node5\\\",\\\"NODENAME\\\":\\\"一线审核\\\",\\\"TASKDATAID\\\":\\\"3\\\",\\\"TASKOID\\\":\\\"148169\\\"},{\\\"ACTIONID\\\":\\\"act4\\\",\\\"ACTIONNAME\\\":\\\"提交一线审核\\\",\\\"CREATETIME\\\":\\\"2020-08-04 19:18:09.0\\\",\\\"DEALEDIDEA\\\":\\\"123\\\",\\\"ID\\\":\\\"1518966\\\",\\\"NAME\\\":\\\"系统管理员root\\\",\\\"NODEID\\\":\\\"node4\\\",\\\"NODENAME\\\":\\\"二线处理\\\",\\\"TASKDATAID\\\":\\\"4\\\",\\\"TASKOID\\\":\\\"148169\\\"}\\\]";
        //JSONArray a1 = (JSONArray) JSONArray.parse(jsonString1);
        JSONArray files =  JSONObject.parseArray(jsonString1);
        JSONArray his =  JSONObject.parseArray(jsonString2);
        JSONArray jsonArray1 = new JSONArray();  
        for (int i = 0; i < his.size(); i++) {  
            //把json对象转化成字符串再转化成JSONObject同时要求有序
            JSONObject jb = JSONObject.parseObject( his.get(i).toString(), Feature.OrderedField);
            for (int j = 0; j < files.size(); j++) {
               JSONObject jb1 = (JSONObject) files.get(j);  
               if((jb.getString("TASKDATAID").equals(jb1.getString("dataId"))) &&
                    (jb.getString("NODEID").equals(jb1.getString("nodeId")))) {
                   //判断"TASKDATAID"与"dataId"key值是否相等、"NODEID"与"nodeId"key值是否相等 
                  // jsonArray1.add(jb1); 
                   
                   //有序遍历json中的key和value
                   LinkedHashMap jsonMap = 
                        JSON.parseObject(jb1.toJSONString(),new TypeReference<LinkedHashMap>(){});
                    for (Map.Entry entry : jsonMap.entrySet()) { 
                       // System.out.println(entry.getKey() + ":" + entry.getValue());
                        jb.put(entry.getKey(), entry.getValue());
                    }
                   
                   files.remove(j);
               }  
            }
            jsonArray1.add(jb); 
        }  
         
        System.out.println(JSON.toJSONString(jsonArray1, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, 
                 SerializerFeature.WriteDateUseDateFormat));
        return null;

    }

}

序列化问题

Fastjosn, 转化json策略

也就是这个方法:JSONObject.toJSONString(Object object, SerializerFeature… features) Fastjson的SerializerFeature序列化属性: QuoteFieldNames———-输出key时是否使用双引号,默认为true WriteMapNullValue——–是否输出值为null的字段,默认为false WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非null

 public static void main(String\[\] args) {
        Map<String,Object> map = new HashMap<>();
        map.put("Striong",null);
        map.put("aaa",1);
        map.put("sss",null  );
        System.out.println(map);
        String jsonString = JSONObject.toJSONString(map, SerializerFeature.WriteMapNullValue);
        System.out.println(jsonString);
        Map<String, Object> map1 = JSONObject.parseObject(jsonString, new TypeReference<Map<String, Object>>() {
        });
        System.out.println(map1);
        System.out.println(map1.get("sss"));
        System.out.println(map1.get("aaa"));
    }

    //结果
    {aaa=1, sss=null, Striong=null}
{"aaa":1,"sss":null,"Striong":null}
{aaa=1, sss=null, Striong=null}
null
1