zoukankan      html  css  js  c++  java
  • json手动解析详解

    项目中有时候仅仅需要一个或者多个字段时可以使用这种解析方式,省去创建实体类。

    1.首先讲解下最基本的数据格式。

    例如: String json="{'name':'小明','action':'音乐'}";

    首先我们把字符串转化为json对象,其次根据字段名称拿到本类型的数据(最好做下非空判断)

    例如:if(ject.has"name"){

    不管是对象、集合都可用。如果不判断会报空,程序崩溃。

    }

    下面是示例代码

       public void json1(){
            String json="{'name':'小明','action':'音乐'}";
            try {
                JSONObject ject=new JSONObject(json);
                String name=ject.optString("name");
                String action=ject.optString("action");
                Log.i("result","name:"+name+"action:"+action);
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
        }

    2.其次讲解下集合类型的json

      String json="[{'no':11},{'no':22},{'no':33}]";

    一样的需要转换json对象这里就不赘述了

    这里不一样的是需要用循环取出每一项,所以我们得到的每一个对象就要用jsonarray来接收,

    每个array中有一个对象,就需要把每一个子项转换成jsonobject。(这里是取int类型的值)

    所以用方法一来取出我们需要的项(这里最好也要非空判断)。

     public void json2(){
            String json="[{'no':11},{'no':22},{'no':33}]";
            try {
                JSONArray jaay=new JSONArray(json);//定义json数组解析对象
                for(int i=0;i<jaay.length();i++){
                    JSONObject ject=jaay.optJSONObject(i);//解析数组中的单个对象
                    int no=ject.getInt("no");//获取对象的键
                }
                Log.i("aaa","---"+sb.toString());//打印
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    3.复杂的json。

    String json="{'plist':[{'no':1001,'name':'科比','age':20},{'no':1002,'name':'张杰','age':22},{'no':1003,'name':'张磊','age':25}]}";

    这个包含对象和数组。

    首先分析数租在plist下所以拿到plist对象,循环拿到数组

    在分别拿到每一项里面的数据。

     public void json3(){
            //获取JSON
            String json="{'plist':[{'no':1001,'name':'科比','age':20},{'no':1002,'name':'张杰','age':22},{'no':1003,'name':'张磊','age':25}]}";
            try {
                JSONObject object=new JSONObject(json);//JSON对象解析
                JSONArray array=object.optJSONArray("plist");//JSON数组解析  把集合放在数组中
                for(int i=0;i<array.length();i++){//循环迭代数组中的某一项,
                    Map<String,Object> map=new HashMap<String, Object>();//定义MAP集合
                    JSONObject object1=array.optJSONObject(i);//将数组中的值赋值给对象
                    int no=object1.optInt("no");//得到对象的no键值
                    String name=object1.optString("name");//得到对象的name键值
                    int age=object1.optInt("age");//得到对象的age键值
                    //放入集合
                    map.put("no",no);
                    map.put("name",name);
                    map.put("age",age);
                    list.add(map);//放入list集合
                }
                for (Map<String,Object> m:list){//循环迭代打印MAP集合中的键值
                    Log.i("ooooo","no:"+m.get("no")+",name:"+m.get("name")+",age:"+m.get("age"));
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    总结:

    手动解析其实理解之后很简单,注意的就是数组和对象必须区分。一层层往下解析,该方法适用于取少量字段。大量的数据解析会很麻烦(建议用第三方)

    by:磊磊tua

  • 相关阅读:
    【读书笔记】组合计数中的行列式方法 基础
    【读书笔记】有序分拆和无序分拆的结论速览
    三种常见的卷积概述(线性卷积周期卷积圆周卷积)以及重叠保留法重叠相加法
    大会COOKIE与session
    JVM监测&工具[整理中](五)
    谷歌浏览器启动参数
    Maven的配置文件pom.xml
    classLoader卸载与jvm热部署
    在Windows Server 2008R2中安装配置SMTP服务
    Could not start the MS DTC Transaction Manager
  • 原文地址:https://www.cnblogs.com/widgetbox/p/9109660.html
Copyright © 2011-2022 走看看