为了账号安全,请及时绑定邮箱和手机立即绑定

android 读取json 为什么不直接反序列化

android 读取json 为什么不直接反序列化

函数式编程 2019-03-21 18:15:28
如题,为什么不直接创建json 对应的实体,再反序列化,然后直接拿到完整的对象。我看到一些人都是去遍历json 数组。。然后再封装。。不理解为什么要这样做,我不是搞android的,轻点拍我。
查看完整描述

4 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

不知道我这种情况是否算一个原因,在从服务器端传回处理结果的时候。我需要知道服务器端处理的是否成功,所以我会把结果封包到两个子的json 中,一个用来指示处理状态,另一个才是结果。这先解析第一个json 包,然后决定如何处理第二个json 的数据。


查看完整回答
反对 回复 2019-04-16
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

json是一种通用格式,服务器返回json,不把json转成java对象,还能怎样?


查看完整回答
反对 回复 2019-04-16
?
手掌心

TA贡献1942条经验 获得超3个赞

如果取到json后只拿map传递是可行的,而且效率高了那么一丢丢。但是一是维护成本变得高多了吧,下一个接手的人面对一大堆map怎么搞;二是不符合mvc的思想,map与View之间是强耦合的,如果是javabean的话,可以有很多方案去解耦


查看完整回答
反对 回复 2019-04-16
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我们平时写的bean类,这个是指定规则的序列化对象,虚拟机认得,你说用json反序列化获取对象,这个规则是后台定的,虚拟机如何认得?


而且你说的,很多人一直遍历json字符串,然后一个字段一个字段的封装,超级麻烦,我也不知道他们为什么这么做?不管是解析成object对象还是list数据,我都有自己封装的工具,就两三行代码.

如下:


private static Gson sGson;


    public static Gson getGson() {

        if (null == sGson) {

            sGson = new Gson();

        }

        return sGson;

    }

/**

     * 将json字符串转换成一个对象

     *

     * @param jsonStr json字符串

     * @param field   字段名

     * @param clazz   字节码

     * @param <T>     类型

     * @return

     */

    public static <T> T getObject(String jsonStr, String field, Class<T> clazz) {

        JSONObject jsonObject = getJSONObject(jsonStr);

        T t = getGson().fromJson(jsonObject.optString(field), clazz);


        return t;

    }


    /**

     * 将json字符串转换成list数据

     *

     * @param json

     * @param clazz

     * @param <T>

     * @return

     */

    public static <T> List<T> getList(String json, Class<T> clazz) {


        List<T> list = null;


        list = JSON.parseArray(json, clazz);


        return list;

    }

    

     /**

     * 将json字符串转换成jsonObject

     *

     * @param jsonStr

     * @return

     */

    public static JSONObject getJSONObject(String jsonStr) {

        JSONObject mJson = new JSONObject();

        try {

            mJson = new JSONObject(jsonStr);

        } catch (JSONException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        return mJson;

    }

这个是我个人的理解,也没有权威的认证过.


查看完整回答
反对 回复 2019-04-16
  • 4 回答
  • 0 关注
  • 608 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信