Android解析JSON数据几种方式对比

    xiaoxiao2025-11-20  9

    Json介绍

    Json(JavaScript Object Natotion)是一种轻量级的数据交换格式,具有良好的可读性和便于快速编写的特性,主要用于传送数据。Json是一种取代Xml的数据结构,相比于xml更小巧,从而减少数据传输流量和占用的带宽。

    Json语法

    { } 表示对象

    [ ] 表示数组

    " " 表示值或属性

    :   表示前面是key后面是value,value可以是字符串、数字或者另一个数组或对象

    举个例子 {"name":"tom"},表示属性名为name,值是tom。[ {"name":"tom"}, {"name":"jack"}] 这个表示2个对象的数组,等价于{"name":["tom","jack"]}这是一个拥有name数组的对象。

    传统方式(使用org.json包)

      下面给出生成json字符串和解析json字符串的方法。

     

    /** * 将对象转换成json数据 * @param user * @return */ public static String buildJson(User user) { try { JSONObject juser = new JSONObject(); juser.put("name", user.getName()); juser.put("pwd",user.getPwd()); return juser.toString(); }catch (JSONException e) { Log.e("JSON_ERROR",e.getMessage()); } return null; } /** * 将json数据转换成对象 * @param json * @return */ public static User getUser(String json) { JSONTokener jsonTokener = new JSONTokener(json); try { JSONObject user = (JSONObject) jsonTokener.nextValue(); if (user != null) { String name = user.getString("name"); String pwd = user.getString("pwd"); return new User(name,pwd); } }catch (JSONException e){ Log.e("JSON_ERROR",e.getMessage()); } return null; } /** * 将json数据转换成User集合 * @param key * @param json * @return */ public static List<User> getUsers(String key,String json) { List<User> list = new ArrayList<User>(); try { JSONObject jsonObject = new JSONObject(json); if (jsonObject != null) { JSONArray array = jsonObject.getJSONArray(key); if (array != null && array.length() > 0 ) { for (int i = 0; i < array.length(); i ++) { JSONObject userJson = array.getJSONObject(i); User user = new User(); user.setName(userJson.getString("name")); user.setPwd(userJson.getString("pwd")); list.add(user); } } return list; } }catch (JSONException e) { Log.e("JSON_ERROR",e.getMessage()); } return null; } org.json包提供了5个类,分别为JSONArray,JSONObject,JSONStringer,JSONTokener和JSONException。

    JSONException 异常类

    JSONStringer 有序构造

    JSONObject 无序构造

    JSONArray                   数组对象

    JSONStringer传入的键值对是有序的,JSONObject传入的键值对是无序的,一般情况下使用JSONObject即可,但对于一些嵌套的Json以及一些JSONArray没有key只有value的情况,则使用JSONStringer。

    使用类库Gson

    <span style="font-size:18px;font-weight: bold;"> </span><span style="font-size:14px;"> /** * 使用Gson框架将对象转换成String * @param user * @return */ public static String getJson(User user) { Gson gson = new Gson(); return gson.toJson(user); } /** * 使用Gson将String转换成对象 * @param json * @return */ public static User getUser(String json) { Gson gson = new Gson(); try { return gson.fromJson(json,User.class); }catch (Exception e) { Log.e("TAG",e.getMessage()); } return null; } /** * 使用Gson将String转换成对象集合 * @param json * @return */ public static List<User> getUsers(String json) { Gson gson = new Gson(); try { return gson.fromJson(json, new TypeToken<List<User>>(){}.getType()); }catch (Exception e) { e.printStackTrace(); } return null; }</span> 类似Gson的json库常用的有Gson外还有Jackson和FastJson,对于这三个性能的对比网上众说纷纭,当然这跟他们实现的代码有很大的关系,不过个人测试后发现Jackson和FastJson的序列化和反序列化性能相当。Gson性能相比弱一些,但是很稳定。

    转载请注明原文地址: https://ju.6miu.com/read-1304380.html
    最新回复(0)