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