关闭

android JSON解析

标签: json解析
334人阅读 评论(0) 收藏 举报
分类:

     

JSON的定义:

一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 Json.org

JSON Vs XML

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

6.JSON的速度要远远快于XML
android的json解析部分都在包org.json下,主要有以下几个类:

JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/Value)数值。它对外部(External应用toString()方法输出的数值)调用的响应体现为一个标准的字符串(例如:{"JSON": "Hello, World"},最外被大括号包裹,其中的KeyValue被冒号":"分隔)。其对于内部(Internal)行为的操作格式略微,例如:初始化一个JSONObject实例,引用内部的put()方法添加数值:new JSONObject().put("JSON", "Hello, World!"),在KeyValue之间是以逗号","分隔。Value的类型包括:BooleanJSONArrayJSONObjectNumberString或者默认值JSONObject.NULL object 。

JSONStringer:json文本构建类 ,根据官方的解释,这个类可以帮助快速和便捷的创建JSON text。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。。其最大的优点在于可以减少由于格式的错误导致程序异常,引用这个类可以自动严格按照JSON语法规则(syntax rules)创建JSON text。每个JSONStringer实体只能对应创建一个JSON text。

JSONArray它代表一组有序的数值。将其转换为String输出(toString)所表现的形式是用方括号包裹,数值以逗号”,”分隔(例如:[value1,value2,value3],大家可以亲自利用简短的代码更加直观的了解其格式)。这个类的内部同样具有查询行为, get()和opt()两种方法都可以通过index索引返回指定的数值,put()方法用来添加或者替换数值。同样这个类的value类型可以包括:Boolean、JSONArray、JSONObject、Number、String或者默认值JSONObject.NULL object。

  1. //假设现在要创建这样一个json文本
  2. //{
  3. //"phone" : ["12345678", "87654321"], // 数组
  4. //"name" : "yuanzhifei89", // 字符串
  5. //"age" : 100, // 数值
  6. //"address" : { "country" : "china", "province" : "jiangsu" }, // 对象
  7. //"married" : false // 布尔值
  8. //}
  9. try{
  10. //首先最外层是{},是创建一个对象
  11. JSONObjectperson = newJSONObject();
  12. //第一个键phone的值是数组,所以需要创建数组对象
  13. JSONArrayphone = newJSONArray();
  14. phone.put("12345678").put("87654321");
  15. person.put("phone",phone);
  16. person.put("name","yuanzhifei89");
  17. person.put("age",100);
  18. //键address的值是对象,所以又要创建一个对象
  19. JSONObjectaddress = newJSONObject();
  20. address.put("country","china");
  21. address.put("province","jiangsu");
  22. person.put("address",address);
  23. person.put("married",false);
  24. }catch(JSONException ex) {
  25. //键为null或使用json不支持的数字格式(NaN, infinities)
  26. thrownewRuntimeException(ex);
      




// 普通Json数据解析

58 privatevoid parseJson(String strResult) {
59 try{
60 JSONObject jsonObj = newJSONObject(strResult).getJSONObject("singer");
61 intid = jsonObj.getInt("id");
62 String name = jsonObj.getString("name");
63 String gender = jsonObj.getString("gender");
64 tvJson.setText("ID号"+id + ", 姓名:" + name + ",性别:"+ gender);
65 }catch(JSONException e) {
66 System.out.println("Json parse error");
67 e.printStackTrace();
70 //解析多个数据的Json
71 privatevoid parseJsonMulti(String strResult) {
72 try{
73 JSONArray jsonObjs = newJSONObject(strResult).getJSONArray("singers");
74 String s = "";
75 for(inti = 0; i < jsonObjs.length() ; i++){
76 JSONObject jsonObj = ((JSONObject)jsonObjs.opt(i))
77 .getJSONObject("singer");
78 intid = jsonObj.getInt("id");
79 String name = jsonObj.getString("name");
80 String gender = jsonObj.getString("gender");
81 s += "ID号"+id + ", 姓名:" + name + ",性别:"+ gender+ "\n";
82 }
83 tvJson.setText(s);
84 }catch(JSONException e) {
85 System.out.println("Jsons parse error !");
86 e.printStackTrace(); 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:26567次
    • 积分:412
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:28篇
    • 译文:0篇
    • 评论:1条
    最新评论