一招搞定所有JSON解析

笔者最近参加了一次校招,HR问我XML解析,而且还抠细节,自我从JavaWEB转入Android以来就没用过XML解析,我勒个去忘光了。他不知道现在企业里与Android端交互数据的基本都用JSON么!
不多说了,下面看代码,这是我总结的JSON解析的7种情况(非常完整)。读者可以稍作整理,做成一个工具类。

/**
 * @author 换煤气
 * ☆☆☆json数组对应java中的list或数组
 * ☆☆☆json对象对应java中的map或自定义对象
 * 
 * 1. 将json格式的字符串{}转换为Java对象, 使用原生API
 * 2. 将json格式的字符串{}转换为Java对象, 使用GSON
 * 3. 将json格式的字符串[]转换为Java对象的List, 使用原生API
 * 4. 将json格式的字符串[]转换为Java对象的List, 使用GSON
 * 5. 将Java对象转换为json字符串{}, 使用GSON
 * 6. 将Java对象的List转换为json字符串[], 使用GSON
 * 7.将json格式的字符串{}转化为java中的map,(key为特殊字符时)
 *
 */
public class JsonParsing extends AndroidTestCase{

    /*
     *  [1]将json格式的字符串{}转换为Java对象, 使用原生API
     */
    public void jsontoObjectbyAPI() throws JSONException{
        String jsonString = "{\"name\":\"Tome\",\"age\":19,\"sex\":\"man\"}";
        //获取jsonObject对象
        JSONObject jsonObject = new JSONObject(jsonString);
        //获取json对象的values值
        String name = jsonObject.getString("name");
        int age = jsonObject.getInt("age");
        String sex = jsonObject.getString("sex");
        //转化成自定义对象
        Student student = new Student(name,age,sex);

        Log.e("TAG", student.toString());
    }

    /*
     * [2]将json格式的字符串{}转换为Java对象, 使用GSON
     */
    public void jsontoObjectbyGSON(){
        String jsonString = "{\"name\":\"Tome\",\"age\":19,\"sex\":\"man\"}";

        Student student = new Gson().fromJson(jsonString, Student.class);
        Log.e("TAG", student.toString());

    }

    /*
     * [3]将json格式的字符串[]转换为Java对象的List, 使用原生API
     */
    public void jsontolistbyAPI() throws JSONException{
        String jsonString = "[{\"name\":\"Tome\",\"age\":19,\"sex\":\"man\"}," +
                "{\"name\":\"Locy\",\"age\":17,\"sex\":\"women\"}," +
                "{\"name\":\"jery\",\"age\":20,\"sex\":\"man\"}]";
        List<Student> list = new ArrayList<Student>();

        JSONArray jsonArray = new JSONArray(jsonString);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            String name = jsonObject.getString("name");
            int age = jsonObject.getInt("age");
            String sex = jsonObject.getString("sex");

            Student student = new Student(name, age, sex);

            list.add(student);

        }

        Log.e("TAG", list.toString());
    }

    /*
     * [4]将json格式的字符串[]转换为Java对象的List, 使用GSON
     */
    public void jsontolistbyGSON(){
        String jsonString = "[{\"name\":\"Tome\",\"age\":19,\"sex\":\"man\"}," +
                "{\"name\":\"Locy\",\"age\":17,\"sex\":\"women\"}," +
                "{\"name\":\"jery\",\"age\":20,\"sex\":\"man\"}]";

        List<Student> list = new Gson().fromJson(jsonString, new TypeToken<List<Student>>(){}.getType());
        Log.e("TAG", list.toString());
    }

    /*
     * [5]将Java对象转换为json字符串{}, 使用GSON
     */
    public void objecttojsonbyGSON(){
        Student student = new Student("Tom", 13, "man");
        String jsonString = new Gson().toJson(student);
        Log.e("TAG", jsonString);

    }

    /*
     * [6]将Java对象的List转换为json字符串[], 使用GSON
     */
    public void listtojsonbyGSON(){ 
        List<Student> list = new ArrayList<Student>();
        list.add(new Student("Tome", 17, "man"));
        list.add(new Student("lucy", 14, "women"));

        String jsonString = new Gson().toJson(list);
        Log.e("TAG", jsonString);

    }

    /*
     * [7]当json对象中的key出现数字或者空格等在java里无法定义的标识符,我们可以考虑将其转化为map。
     * 其实将json对象转化为map比转化为自定义对象更加方便,只是不够形象直观。
     */
    public void jsontomapbyGSON(){
        String jsonString = "{\"name\":\"Tome\",\"real age\":19,\"00xx\":\"man\"}";
        Map<String,Object> map = new Gson().fromJson(jsonString, new TypeToken<Map<String,Object>>(){}.getType());
        Log.e("TAG", map.toString());
    }

    public void jsontolistmapbyGSON(){
        String jsonString = "[{\"name1\":\"Tome\",\"age\":19,\"1 sex\":\"man\"}," +
                "{\"name2\":\"Locy\",\"age\":17,\"1 sex\":\"women\"}," +
                "{\"name3\":\"jery\",\"age\":20,\"1 sex\":\"man\"}]";

        List<Map<String,Object>> list = new Gson().fromJson(jsonString, new TypeToken<List<Map<String,Object>>>(){}.getType());
        Log.e("TAG", list.toString());
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值