如果用的是jar包 则导包为 net.sf.json.JSONObject
如果用的是fastjson 则导包为 import com.alibaba.fastjson.JSONObject
以下为fastjson。。。 jar包不支持json按存放顺序打印 见/weixin_42498050/article/details/116118948
String字符串转为JSONObject
JSONObject response_clusterJson = JSONObject.parseObject(response_cluster);
// 创建JSONArray,把JSONObject放到JSONArrayJSONArray ja = new JSONArray();// 获取JSONArrayJSONArray items = response.getJSONArray("items");if (!items.isEmpty()) {// 获取JSONArray长度int size = items.size();// 如果JSONObject定义在for循环外面。则JSONArray结果会出现{"$ref":"$[0]"},{"$ref":"$[0]"}]// /u014487025/article/details/82711925//JSONObject jo = new JSONObject(true);// for循环遍历JSONObject// 判断items长度,原则上长度不会大于3if (size >= 1 && size <= 3) {for (int i = 0; i < size; i++) {String name;String address;String cluster;String status;String location = "【items】JSONArray数组下第" + i + "个";// items.name名称校验name = items.getJSONObject(i).getString("name");if (name.isEmpty() || name == null || name.length() == 0) {System.err.println(bug + location + "name错误,结果为空,实际为" + name);} else if (name.matches("edge\\S*")) {//System.out.println(pass +location "名称符合正则");}// items.address主机名/IP校验address = items.getJSONObject(i).getString("address");if (address.isEmpty() || address == null || address.length() == 0) {System.err.println(bug + location + "主机名/IP错误,结果为空,实际为" + address);} else if (address.matches("[0-9a-z]+")) {//System.out.println(pass +location "主机名/IP符合正则");}// items.cluster集群校验cluster = items.getJSONObject(i).getString("cluster");if (cluster.isEmpty() || cluster == null || cluster.length() == 0) {System.err.println(bug + location + "集群错误,结果为空,实际为" + cluster);} else if (cluster.equalsIgnoreCase("Default")) {System.out.println(pass + location + "集群符合正则");}// items.status状态校验status = items.getJSONObject(i).getString("status");if (status.isEmpty() || status == null || status.length() == 0) {System.err.println(bug + location + "状态错误,结果为空,实际为" + status);} else if (status.matches("up|Up|down|Down")) {System.out.println(pass + location + "状态符合正则");}/* 创建JSONObject对象,把key value放到JSONObjectJSONObject为每次创建出来的对象,不要设置为全局,加班加的蒙圈了,开始放到了for循环外层。。。/u014487025/article/details/82711925JSONArray如果add同一个元素(比如a)两次及以上时,只有第一次add a时存放数据,其它位置,存放指向第一次add的a在JSONArray中的位置指针*//* 按放到JSONObject的顺序(如 name address cluster status )打印JSONObject/JSONArray。只需要在创建json对象的时候,后面ordered传true之前一直报错是因为之前用的jar包方式,不支持true。改为maven配置后就可以了。。。默认不传true,则会按照value的名称排序(目前看是,具体要看JSONObject怎么定义的)*/JSONObject jo = new JSONObject(true);jo.put("name", name);jo.put("address", address);jo.put("cluster", cluster);jo.put("status", status);System.out.println("debug-jo JSONOObject格式,第" + i + "个数组==" + jo);// 把JSONObject放到JSONOArrayja.add(jo);}System.out.println("debug-ja的JSONOArray格式==" + ja);// JSONOArray转json字符串String jaStr = ja.toString();System.out.println("debug-jaStr最终存入log的json格式==" + jaStr);FileWrite.originLogOnlyWrite(jaStr, getcn);}
运行结果
不知道json格式的情况下 如何遍历所有key value?
for (int i = 0; i < cmoja.size(); i++) {// 不知道json格式的情况下,遍历所有的key valueJSONObject cmoob = cmoja.getJSONObject(i);for (Map.Entry<String, Object> cmoentry : cmoob.entrySet()) {String cmokey = cmoentry.getKey();String cmovalue = (String) cmoentry.getValue();// System.out.println("cmo系统的key值==【" + cmokey + "】,对应的value==【" + cmovalue + "】");// 只需要校验value,不需要校验key,因为key是自己根据2端的数据自己定义的// 校验mec接口是否包含cmo接口的全部value