【问题标题】:How to use JSONObject effective in your android project如何在你的 android 项目中有效地使用 JSONObject
【发布时间】:2020-09-17 15:27:30
【问题描述】:

最近我的项目有json需求,但是我之前从来没有使用过json,所以我想知道如何有效地使用json。 我使用 Volley 作为我的网络库,默认支持 json,知道我可以获取 JSONObject 或 JSONArray 响应,并且可以通过以下方法获取数据:

String name = response.optString("name"); 

显然这不是一个好主意,我想生成java类作为我的响应数据,使用模型类包装JSONObject或使用gson、jackson生成java类,有人可以分享你的经验吗?谢谢。

【问题讨论】:

  • 为什么这不是个好主意? JSONObject 已经是一个表示。如果要将 JSONObject 转换为自定义模型,请执行此操作。只需迭代 JSONObject、JSONArray 或其他任何内容,并使用普通的 ArrayList、HashMap 或您需要的任何内容创建您自己的数据结构。

标签: android json jsonobject


【解决方案1】:

关于 JSON+Android 的实现和用例有数百万,但以下是常见的方法。

  1. 我使用 gson 来反序列化一个对象,如下所示。对我来说,它比序列敏感的Parcelable 转换更可靠。

     public static String toJson(Object obj){
         Gson gson = new Gson();
         return gson.toJson(obj);
     }
    
     public static Object fromJson(String json, Class clazz) 
     {
         Gson gson = new Gson();
         return gson.fromJson(json, clazz);
     }
    
  2. 在与服务器进行 json 通信的情况下,Retrofit 提供了简洁的 json i/o 处理。

  3. 或者,我使用 loopj async library 并实现静态 JSON 反序列化器,因为所有属性都可以自己处理。

     public class Question {
         public int count;
         public String text;
         public Date generateTime;
    
         public static Question FromJson(JSONObject jsonObject) throws JSONException {
             Question result = new Question();
             result.category = jsonObject.optInt("Count");
             result.text = jsonObject.optString("Text", "");
             result.generateTime = DateTime.parse(jsonObject.optString("GenerateTime")).toDate() : new Date();
             return result;
         }
     }
    

【讨论】:

  • 一开始我选择了jackson,但我发现它的lib.jar有6000+方法让我的项目几乎达到65535问题,所以我改用gson。谢谢
猜你喜欢
  • 2012-06-28
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2021-08-31
  • 2012-10-18
  • 2015-07-27
  • 2023-04-06
相关资源
最近更新 更多