• Android json 数据解析


    1、json格式
    2、json解析
    3、gson解析
    4、fastjson解析

    一、Json格式
    json一种轻量级的数据交换格式。在网络上传输交换数据一般用xml, json。
    两种结构:
    1)对象(key-value集合)
     {"id":"1001","name":"zhangshan","address":"shanghai"}
    2)数组(数组对象),以[  ] 包括的key-value对象

    {"students":[{"sid":1001,"name":"zhangsan","addr":"Yichang","pic":"111.jpg"},                                             {"sid":1002,"name":"Jack","addr":"Beijing","pic":"222.jpg"}]}


    或:

    {[{"sid":1001,"name":"zhangsan","addr":"Yichang","pic":"111.jpg"},                                             {"sid":1002,"name":"Jack","addr":"Beijing","pic":"222.jpg"}]}


    二、json数据生成,解析
    JSONObject,代表了一个JSON对象,可以完成Java对象与JSON字符串之间的相互转换。
    JSONArray,代表一个JSON数组,可以完成Java集合(集合元素可以是对象)与JSON字符串之间的转换。

    1、Java对象与JSON字符串相互转换
    方式一:

    Student stu = new Student(1005,"张三","Wuhan","zs.jpg");

    JSONObject jsonObject = new JSONObject(stu);


                      jsonObject.toString()就是字符串输出: {"sid":1005,"name":"张三","addr":"Wuhan","pic":"zs.jpg"}

    解析为对象:

    JSONObject jsonObject = new JSONObject(str);

    Iterator<String> iterator = jsonObject.keys();

    Student stu = new Student();

    while(iterator.hasNext()){

    //可以利用java反射,写泛型方法

    String key = iterator.next();

    if(key.equals("sid")){

    stu.setSid(jsonObject.getInt(key));

    }

    if(key.equals("name")){

    stu.setName(jsonObject.getString(key));

    }

    if(key.equals("sid")){

    stu.setAddr(jsonObject.getString(key));

    }

    if(key.equals("sid")){

    stu.setPic(jsonObject.getString(key));

    }

    }


    方式二:
                               Student stu = new Student(1005, "张三", "Wuhan", "zs.jpg");

    JSONObject jsonObject = new JSONObject();

    jsonObject.put("zs", stu);


              同样jsonObject.toString()就是字符串输出 {"zs":"{sid:1005, name:张三, addr:Wuhan, pic:zs.jpg}"}。要注意,如果Student没有覆写toString()方法,输入的是:{"zs":"org.itair.domain.Student@2666e815"}





    2、集合与JSON字符串相互转换
    方式一、
    转换:

    Student s1 = new Student(1001,"zhangsan","yichang","111");

    Student s2 = new Student(1002,"Jack","Beijing","222");

    List<Student> stus = new ArrayList<Student>();

    stus.add(s1);

    stus.add(s2);

    JSONArray array = new JSONArray(stus);

                    array的字符串是:[{"sid":1001,"name":"zhangsan","addr":"yichang","pic":"111"},{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222"}]


    解析:
                               JSONArray jsonArray = new JSONArray("要解析的json字符串");

    for (int i = 0; i < jsonArray.length(); i++) {

    JSONObject jsonObject2 = jsonArray.getJSONObject(i);

    //解析成特定的对象操作,new对象,从jsonObject2取出值来装进去

    Iterator<String> iterator = jsonObject2.keys();

    while (iterator.hasNext()) {

    String key = iterator.next();

    Object value = jsonObject2.get(key);

    map.put(key, value);

    }

    }


    方式二、
    转换:
           Student s1 = new Student(1001,"zhangsan","yichang","111");

    Student s2 = new Student(1002,"Jack","Beijing","222");

    List<Student> stus = new ArrayList<Student>();

    stus.add(s1);

    stus.add(s2);

    JSONObject jsonObject = new JSONObject();

    jsonObject.put("students", stus);

                    

                    jsonObject的字符串:{"students":[{"sid":1001,"name":"zhangsan","addr":"yichang","pic":"111"},{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222"}]}


    解析:
           由于上面的转换方式是把集合对象放到 JSONObject中。
           
      JSONObject jsonObject = new JSONObject("要解析的json字符串");

    JSONArray jsonArray = jsonObject.getJSONArray("key");//key就是上面放入的students

                  后面的代码同上循环。

                    


    在Android的项目中,一般不会把Json字符串解析成对象的集合,而多是解析成List<Map<String,Object>> 


    List<Map<String,Object>> list = new ArrayList<Map<String ,Object>>();

    for (int i = 0; i < jsonArray.length(); i++) {

    JSONObject jsonObject2 = jsonArray.getJSONObject(i);

    Map<String ,Object> map = new HashMap<String, Object>();

    Iterator<String> iterator = jsonObject2.keys();

    while (iterator.hasNext()) {

    String key = iterator.next();

    Object value = jsonObject2.get(key);

    map.put(key, value);

    }

    list.add(map);

    }


    要解析成对象集合,还是用Gson, fastjson比较方便。


    三、Gson
    toJson(Object)  把对象转为json字符串
    fromJson(String, Object)   把json字符串转为对象
  • 相关阅读:
    BOS13——quartz定时任务,Highcharts前端图表的使用
    BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)
    BOS10——权限控制的实现,apache shiro权限管理框架的使用,参数同名问题,EasyUI的combotree的使用
    BOS08——Web工程中的CXF客户端,加载select框中的内容,select框移动,提交时将select全部选中,CRM中更新的方法,别名的用于不用
    CXF——WebService简介,CXF框架的使用
    BOS06——带有过滤条件的查询(解决form表单提交时,分页携带过滤条件困难的问题)and连表查询返回数据不标准问题,文件导出,BaseDao扩展一个离线Criteria查询,前端字段名重复问题(不知道对应那个字段了),多张表保存问题
    Python基础之文件处理
    Python基础之字符编码
    Python基础之数据类型
    Python安装
  • 原文地址:https://www.cnblogs.com/sharecenter/p/5621105.html
Copyright © 2020-2023  润新知