json-如何检查服务器中的响应是JSONAobject还是JSONArray?

问题描述

如何检查服务器中的响应是JSONAobject还是JSONArray?

程序中的一个服务器,默认返回一些JSONArray。但当一些错误发生时,它返回JSONObject错误的代码。我想解析json来检查错误。下面的代码用来解析错误:

public static boolean checkForError(String jsonResponse) {

    boolean status = false;
    try {

        JSONObject json = new JSONObject(jsonResponse);

        if (json instanceof JSONObject) {

            if(json.has("code")){
                int code = json.optInt("code");
                if(code==99){
                    status = true;
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return status ;
}

但是当 jsonResponse 可以运行时确获得 JSONException。它是一个JSONArray,JSONArray
不能转换成 JSONOBject。如何确认 jsonResponse 传过来的值是 JSONArray 还是 JSONObject ?

解决方案

我明白你的意思了,首先看下这两个类型转换为字符串后的区别

    ......
    JSONObject jo = createJSONObject();
    JSONArray ja = new JSONArray();
    ja.put(jo);
    System.out.println("jo is "+jo.toString());//{"sex":"男","username":"ZhangSam","score":123}
    System.out.println("ja is "+ja.toString());//[{"sex":"男","username":"ZhangSam","score":123}]
}
public static JSONObject createJSONObject(){
    JSONObject jsonObject = new JSONObject();
    try {
        jsonObject.put("username", "ZhangSam");
        jsonObject.put("sex", "男");
        jsonObject.put("score", new Integer(123));
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return jsonObject;
}

所以你要想写都能识别的,只需正则检查是否[开头即可
然后才能进行你的这一步:如是非[开头,JSONObject json = new JSONObject(jsonResponse);
另外还一种方法就是在finally中处理
最后一点与题无关的是,JSONObject与JSONArray可以互转,
(toJSONObject/toJSONArray)

解决方案二:

使用 JSONTokener。
JSONTokener.nextValue()会给出一个对象,然后可以动态的转换为适当的类型。

Object json = new JSONTokener(jsonResponse).nextValue();
if(json instanceof JSONObject){
    JSONObject jsonObject = (JSONObject)json;
    //further actions on jsonObjects
    //...
}else if (json instanceof JSONArray){
    JSONArray jsonArray = (JSONArray)json;
    //further actions on jsonArray
    //...
}
时间: 2024-09-18 19:02:36

json-如何检查服务器中的响应是JSONAobject还是JSONArray?的相关文章

html中如何读取服务器中的信息

问题描述 html中如何读取服务器中的信息 传送的网址是http://localhost:8080/goform/goform_get_cmd_process?cmd=pbm_capacity_info&sms_cmd=pbm_sim 响应的信息时{""pbm_sim_type"":""0""pbm_sim_max_record_num"":""250""pb

JSON在ASP.NET中使用方法_实用技巧

Json.NET的简单介绍 首先介绍一个为方便在.NET中使用JSON的API,Json.NET.它方便我们读取从浏览器流向服务器的JSON对象,也方便在响应流中写入JSON对象. Json.NET只提供了服务器端的方法,主要有实现JSON文本与XML互相转换的类,有自定义读写JSON的JsonReader类和JsonWriter类,还有一个非自定义读写JSON的JavaScriptSerializer类. ASP.NET AJAX中,服务器端由JavaScriptSerializer类的几个方

Android 实现获取服务器的字符串响应

学习内容: 例一.使用StringRequest实现获取服务器的字符串响应...  Android的Volley中到底实现了哪些请求才是我们在开发中需要进行使用的...Volley实现的东西其实并不是很多,它的主要功能是实现异步进行网络请求和图片加载,其实就是异步加载解析Json数据,异步获取服务器的字符串数据,异步实现网络图片的动态加载,还有一个请求就是清空缓存的请求,不过使用的地方不是很多,主要还是前面三个方面,因此Volley相对于AndBase来说,其实还算是一个轻量级的框架,而AndB

你的服务器没有正确响应Token验证的解决方法

你的服务器没有正确响应Token验证,请阅读消息接口使用指南 微信 微信公众平台开发模式 平台 消息 接口 启用 URL Token作者:http://txw1958.cnblogs.com/ 原文:http://www.cnblogs.com/txw1958/archive/2013/01/31/weixin-if2-enable.html    你的服务器没有正确响应Token验证的解决方法   一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种

Nginx服务器中关于SSL的安全配置详解_nginx

 本文向你们展示如何在nginx的web服务器上设置更强的SSL.我们是通过使SSL无效来减弱CRIME攻击的这种方法实现.不使用在协议中易受攻击的SSLv3以及以下版本并且我们会设置一个更强的密码套件为了在可能的情况下能够实现Forward Secrecy,同时我们还启用HSTS和HPKP.这样我们就有了一个更强.不过时的SSL配置并且我们在Qually Labs SSL 测试中得到了A等级. 我们在nginx的设置文档中如下编辑 复制代码 代码如下: /etc/nginx/sited-ena

服务器没有正确响应Token验证的解决方法

一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况 1. 你的服务器没有正确响应Token验证,请阅读消息接口使用指南 这样回头检查一下各项配置是否正确.如果确定配置没有问题,请按下面的方法检查 2. 请求URL超时 你的服务器在国外,或者服务器网速不给力,一般多试几次就可以了.如果经常这样,就需要考虑更换服务器 3. 提交成功 恭喜你,配置成功了. 我们来讲解一下第一种的原因及解决方法. 二.问题分析 首先要了解的是什么是URL和Token,在

远程检测Linux服务器中内存占用情况的方法

  我们要用的监控内存的脚本在Nagios 市场上,在创建者的Github仓库中也可以找到. 假设我们已经安装了NRPE,我们首先在我们想要监控的服务器上下载脚本. 准备远程服务器 在 Debain/Ubuntu 中: 代码如下: # cd /usr/lib/nagios/plugins/ # wget https://raw.githubusercontent.com/justintime/nagios-plugins/master/check_mem/check_mem.pl # mv ch

跨服数据在HTML中显示,但现在想把它转换成图表形式,如何获取我从服务器中获取的数据

问题描述 跨服数据在HTML中显示,但现在想把它转换成图表形式,如何获取我从服务器中获取的数据 跨服数据在HTML中显示,但现在想把它转换成图表形式,如何获取我从服务器中获取的数据 解决方案 在你的服务器,把数据输出为json格式,然后通过jsonp的方式获取. 解决方案二: 看看jsonp 吧

改变服务器中的android sensor

问题描述 改变服务器中的android sensor 程序中有个服务器用来检查电话是否响了.在这个服务器中我想检查电话是否开启或关闭. 是否可以一直运行 sensor 来检查服务器是否在运行,还是这个特别损耗电池和 CPU 资源呢? @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { boolean turnAroun