zoukankan      html  css  js  c++  java
  • android:使用Gon解析解析json


    android中有提供json的解析,但其JsonReader的SDK是从3.0之后才能使用的

    其解析方法可参考http://developer.android.com/reference/android/util/JsonReader.html

     

    对于低版本的我们可以使用一些外加包来方便实现解析

    使用Gson包

    com.google.gson.stream.JsonReader

    下载地址:http://code.google.com/p/google-gson/downloads/list

    文档Docs:http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html
    例如要解析的数据为

     String jsonData = "[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]";

    其解析方法可以如下:

            try{
                //如果需要解析JSON数据,首要要生成一个JsonReader对象
                JsonReader reader = new JsonReader(new StringReader(jsonData));
                reader.beginArray();
                while(reader.hasNext()){
                    reader.beginObject();
                    while(reader.hasNext()){
                        String tagName = reader.nextName();
                        if(tagName.equals("name")){
                            System.out.println("name--->" + reader.nextString());
                        }
                        else if(tagName.equals("age")){
                            System.out.println("age--->" + reader.nextInt());
                        }
                    }
                    reader.endObject();
                }
                reader.endArray();
            }
            catch(Exception e){
                e.printStackTrace();
            }

    解析一个json对象到一个自定义对象,例如:

    要解析String jsonData = "{\"name\":\"Michael\",\"age\":20}";

    可以定义model类user

    public class User {
        private String name ;
        private int age ;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }

    解析过程:

            Gson gson = new Gson();
            User user = gson.fromJson(jsonData, User.class);
            System.out.println("name--->" + user.getName());
            System.out.println("age---->" + user.getAge());


    补充:若要解析的json数据如下:

    {
    AList: [
    {
       a1:1,
       a2:2,
       a3:3
    },
    {
       a1:11,
       a2:22,
       a3:33
    }
    ],
    BList: [
    {
       b1:1,
       b2:2,
       b3:3
    },
    {
       b1:11,
       b2:22,
       b3:33
    }
    ],
    C: 0
    }

    可自定义对象如下:

    public class Model {
        private List<A> AList;
        private List<B> BList;
        private int C;
    
                public class A {
            private int a1;
            private int a2;
            private int a3;
                    .........
                   }
                public class B {
            private int b1;
            private int b2;
            private int b3;
                    .........
                   }
             ........
    }
    //省略了get set 

     

     

     

    解析一组json对象到自定义对象

    例如要解析的数据为:

    String jsonData = "[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]";

    解析到user,其定义如上,

    解析过程为

        public void parseUserFromJson(String jsonData){
            Type listType = new TypeToken<LinkedList<User>>(){}.getType();
            Gson gson = new Gson();
            LinkedList<User> users = gson.fromJson(jsonData, listType);
            //用迭代器遍历users
            for (Iterator iterator = users.iterator(); iterator.hasNext();) {
                User user = (User) iterator.next();
                System.out.println("name--->" + user.getName());
                System.out.println("age---->" + user.getAge());
            }

     and check it :http://stackoverflow.com/questions/2779251/convert-json-to-hashmap-using-gson-in-java

     

    对象-->JSON

       假如我们有一个类Person:

    public class Person {

        public long id;

        public String name;

        public boolean isMale;

        public String avatar;

    }

       通过一个Gson实例:

    Gson gson = new Gson();

       我们可以直接将一个Person实例转换成Json字符串:

    Person person = new Person();

    person.id= 111;

    person.name= "张三";

    person.isMale= true;

    person.avatar= "http://aaaaaaaaa";

    String jsonStr = gson.toJson(person);

    Log.v("=============", jsonStr);

       即使是List和Map也可以(以List为例):

    ArrayList<Person> list = new ArrayList<Person>();

    Person person = new Person();

    person.id= 111;

    person.name= "张三";

    person.isMale= true;

    person.avatar= "http://aaaaaaaaa";

    list.add(person);


    person = new Person();

    person.id= 222;

    person.name= "李四";

    person.isMale= false;

    person.avatar= "http://bbbbbbbbb";

    list.add(person);

    String jsonStr = gson.toJson(list);

    Log.v("=============", list);

     可参考:http://iandroiddev.com/post/2011-10-08/5647743

  • 相关阅读:
    oracle查看字符集和修改字符集
    oracle11g 使用数据泵导出导入数据
    Oracle 11G在用EXP 导出时,空表不能导出解决
    帮助小伙伴写的组装xml字符串类
    GCD-01
    UITableViewCell-03
    UITableViewCell-02
    iOS代理-03
    UITableViewCell-01
    iOS代理-02
  • 原文地址:https://www.cnblogs.com/mybkn/p/2508306.html
Copyright © 2011-2022 走看看