1. 网上支持JSON封装的JAR库包有很多,有些功能比较简单,有些提供的功能比较完善,比如org.json.simple包,太简单了,很多基础的功能都没有,而com.alibaba.fastjson包则比较完善,由于项目中已经有该包,所以直接使用。
2. JSON中主要的类有两个:JSONObject和JSONArray,前者和后者的区别是,前者封装下一层是用{}的方式,而后者是用[]的方式,后者是用在同一层次有多项记录的情况,也就是并列(数组)的情况。
3. 封装列子:
JSONObject json =new JSONObject(); //创建jsonobject对象
Map<String,String> map = new HashMap(); //创建map对象
JSONArray array =new JSONArray(); //创建jsonarray对象
Date date = newDate(); //获取当前时间对象
SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMddHHmmss"); //时间转换格式
map.put("PROV_CODE","20");
map.put("DATA_SOURCE",local_id);
map.put("NODE_ID",node_id);
map.put("BATCH_CODE",batch_id);
map.put("BATCH_TYPE","0");
map.put("EVENT_TYPE_ID","0");
map.put("REC_RECORD_CNT",org_bill_list.size()+"");
map.put("REPEAT_RECORD_CNT",repeat_bill_list.size()+"");
map.put("START_TIME",sdf.format(date));
map.put("END_TIME",sdf.format(date));
array.add(map);
json.put("data",array);
System.out.println(json.toJSONString());
打印结果:
{"data":[{"BATCH_CODE":"1234","BATCH_TYPE":"0","DATA_SOURCE":"200","END_TIME":"20170210162223","EVENT_TYPE_ID":"0","NODE_ID":"127.0,0,1","PROV_CODE":"20","REC_RECORD_CNT":"0","REPEAT_RECORD_CNT":"0","START_TIME":"20170210162223"},{"$ref":"$.data[0]"}]}
--先用JSONArray封装两个并列的map,类似[{},{}]的格式,再用JSONObject在最外层封装一层,类似{“data”:[{},{}]}的格式。总而言之,同一层的多条并列加入json消息包时用JSONArray.add封装,外层封装内层时用JSONObject.put封装。
4. 解析例子
JSON的解析是用JSONObject.getJSONArray(key)来获取下一层的并列记录数组。用JSONArray.getJSONObject(intindex)的方式获取json数组中的具体jsonobject对象,再通过JSONObject.get(key)的方式获取某个标签下的数据信息。