APP监控服务端返回的数据字段是否为空

背景:有一天,app线上版本的页面有些字段没有展示出来,O说,这种情况为什么没有报警!

需求:APP监控服务端返回的数据字段是否为空,有空字段则触发报警。

技术实现:在实现api监控的前提下,在保存监控数据的位置,遍历每一个key值对应的value,判断是否为空。

/**
 * 检查接口返回的数据是否有字段值为空
 * @param jsonStr 服务端返回的mapData/data的json窜
 * @return 有值为空返回904,正常则返回200
 */
public static int checkValueIsEmpty(String jsonStr){
    if(TextUtils.isEmpty(jsonStr)){
        //为空直接返回904
        return Constant.CODE_904;
    }
    JSONObject jsonObject = null;
    try {
        jsonObject = new JSONObject(jsonStr);
    } catch (JSONException e) {
        e.printStackTrace();
        return Constant.CODE_200;
    }
    Iterator<String> keys = jsonObject.keys();
    while (keys.hasNext()) {
        String strTemp = keys.next();
        try {
        //根据key取出对应的value
        String value = jsonObject.getString(strTemp);
        if(TextUtils.isEmpty(value)){
            //为空直接返回904
            return Constant.CODE_904;
        }
        //检查取出的value是jsonObject还是jsonArray或者是变量
            switch (checkIsObjectOrArray(value)){
                case 1://array,继续遍历array所属的对象中的字段
                    JSONArray jsonArray = new JSONArray(value);
                    for(int i=0;i<jsonArray.length();i++){
                        //继续遍历此数组中每个对象的属性是否为空
                        if(checkValueIsEmpty(jsonArray.get(i).toString())==Constant.CODE_904){
                            return Constant.CODE_904;
                        }
                    }
                    break;
                case 2://object,继续遍历object中的字段
                    if(checkValueIsEmpty(value)==Constant.CODE_904){
                        return Constant.CODE_904;
                    }
                    break;
                case 3://正常变量
                    //继续检查下一个key值对应的value
                    continue;
            }} catch (JSONException e) {
            e.printStackTrace();
            return Constant.CODE_200;
        }
    }
    return Constant.CODE_200;
}

/**
 * 检查此json是Object还是JsonArray
 * @param str
 * @return 1:array ,2:object ,3:字符 ,904:字段为空code
 */
private static int checkIsObjectOrArray(String str) {
    try {
        JSONArray array = new JSONArray(str);
        return 1;
    } catch (JSONException e) {// 不是Array,继续判断是不是Object
        try {
            JSONObject object = new JSONObject(str);
            return 2;
        } catch (JSONException e2) {// 不是Array,也不是Object
            return 3;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值