美文网首页
Mars-Json数据解析

Mars-Json数据解析

作者: 六便士少年 | 来源:发表于2015-04-20 21:51 被阅读233次

    什么是JSON

    https://code.google.com/p/google-gson/
    官方文档 http://www.json.org/
    1.JSON:JavaScriptObjectNotation;

    2.JSON数据是一系列键值对的集合

    3.JSON已经被大多数开发人员接受,在网络数据的传输当中应用非常广泛

    4.JSON对于XML来讲解析稍微方便一些

    原生的Json就是一个字符串,json数据解析就是解析字符串

    一个JSON的例子

    {
      {
     "name":"Michael"
     "address:"
      {
          "city":"Beijing"
          "street":"Chaoyang Road"
          "postcode":100025
      }
      }
    }
    

    JSON VS XML

    • 可读性基本相同
    • 都拥有丰富的解析手段
    • JSON相对XML来讲,数据体积小
    • JSON与JavaScript的交互更加方便
    • JSON对数据的描述性相对较差

    使用GsonAPI解析JSON数据的方法

    首先要去下载gson jar包
    解压得到jar 包

    Paste_Image.png

    下载完成之后,将gson-2.2.2.jar包拷贝到工程的libs文件夹中,然后右键jar包选择Build path->add to build path

    Paste_Image.png

    [{"name":"Michael","age":20},{"name":"Mike","age":21}]
    JSON 解析步骤
    1.开始解析数组
    2.开始解析对象
    3.解析键值对
    4.解析键值对
    5.解析对象结束
    6.开始解析对象
    7.解析键值对
    8.解析键值对
    9.解析对象结束
    10,解析数组结束

    实例代码 工具类:

    public class JsonUtils {
    public void parseJson(String jsonData) {
        try {
            // 如果需要解析JSON数据,首要要生成一个JsonReader对象
            JsonReader reader = new JsonReader(new StringReader(jsonData));
            // 开始解析数组
            reader.beginArray();
            // 判断有没有下一个JSON对象
            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();
        }
    }
    }
    

    主Activity:

    public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    private String jsonData = "[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]";
    private Button button;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button = (Button) findViewById(R.id.buttonId);
        button.setOnClickListener(new ButtonListener());
    }
    
    private class ButtonListener implements OnClickListener {
    
        @Override
        public void onClick(View v) {
            JsonUtils jsonUtils = new JsonUtils();
            jsonUtils.parseJson(jsonData);
        }   
    
    }
    }
    

    运行结果:

    Paste_Image.png

    JSON数据可以直接转换成java对象

    示例二,新建了一个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;
    }
    }
    

    注意这一次MainActivity中使用的是json对象,而不是json数组
    private String jsonData = "{\"name\":\"Michael\",\"age\":20}";

    工具类:

    public class JsonUtils {
    public void parseUserFromJson(String jsonData){
        Gson gson = new Gson();
        User user = gson.fromJson(jsonData, User.class);
                //fromJson()方法的两个参数,前面一个是需要解析的json对象数据,后面是你想要jason数据需要转换的类的class
        System.out.println("name--->" + user.getName());
        System.out.println("age---->" + user.getAge()); 
        }
    }
    

    MainActivity.java、User.java 与前面相同

    将Json对象转换成一系列的对象

    JsonUtils.java

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

    MainActivity.java、User.java 与前面相同

    相关文章

      网友评论

          本文标题:Mars-Json数据解析

          本文链接:https://www.haomeiwen.com/subject/apxufttx.html