工作点滴之Json解析

来源:未知 责任编辑:智问网络 发表时间:2013-10-22 19:16 点击:

    Android开发过程中,数据传输是难免的,一般组织数据有两种方式:xml格式和json格式。两者解析都非常方便,而且解析工具也都很多,这里不多作比较。
      下面就Json格式的解析做一个比较实用的分析:
       1) 解析Json格式的数据
       2) 解析单个对象
       3) 解析对象的集合
 
一 大前提--什么是Json ?
1.如果不知道什么是Json,先扫一下盲
 1)JSON:JavaScript Object Notation
 2)  JSON数据是一系列键值对的集合
 3)官方网址:www.json.org, 去看看就什么都明白了
 
2.Json vs xml
 1) JSON和XML可读性基本相同
 2)JSON和XML通用拥有丰富的解析手段
 3)JSON相对XML来讲体积更小
 4)JSON与JavaScript的交互性更加方便
 5) JSON对数据的描述性相对较差
 
二 Android 中的JSON解析工具
1.从API level 11 开始(也就是Android3.0),在android.util包下就有了JsonReader 和 JsonWriter两个帮助类,供我们来解析和使用json。
 
2.Android3.0以下系统的最佳的做法是使用Google的gson类库来解析,其实这也是3.0以后的做法,只是集成了进来,
下载地址:http://code.google.com/p/google-gson/downloads/list
 
3.下载后的jar文件导入到项目中,我相信这大家都会,下面的例子我采用的是gson来解析。
 
三 JSON实战
1. 解析json格式的数据
比如说有一个User对象,他有两个属性:name和age,当然实际情况可能有更多的属性,
那么用json格式表示就是:{name:"Ian", age: "20"},我相信你懂的。
1)自定义JSON帮助类--JsonUtils
Java代码 
public class JsonUtils { 
     
    public void parseJson(String jsonData) { 
         
        try { 
            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.nextString()); 
                    } 
                } 
                reader.endObject(); 
            } 
            reader.endArray(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
         
    } 

 
 
2) Activity代码
 
Java代码 
public class MainActivity extends Activity { 
    private Button btnStart; 
    private String jsonDataUser = "{\"name\":\"Ian\",\"age\":20}"; 
 
 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        btnStart = (Button)findViewById(R.id.btnStart); 
        btnStart.setOnClickListener(new BtnStartSetOnClickListener()); 
         
         
    } 
     
    private class BtnStartSetOnClickListener implements OnClickListener { 
        @Override 
        public void onClick(View v) { 
            JsonUtils jsonUtils = new JsonUtils(); 
            jsonUtils.parseJson(jsonData); 
        } 
    } 
}  
 就这么几行代码,在Console上就可以看到解析输出的信息了,是不是很简单呢?
 
 
2. 解析对象
1)上面解析的是字符串形式,如果我们定义一个User对象会怎么样呢?
 
Java代码 
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; 
    } 

 
2) 解析方法
 
Java代码 
public void parseUserFromJson(String jsonData) { 
     
    Gson gson =new Gson(); 
    User user = gson.fromJson(jsonData, User.class); 
    System.out.println("name---------->" + user.getName()); 
    System.out.println("age---------->" + user.getAge());    
     

 
是不是更简单了呢?
 
3. 解析集合
1)如果不是单个User,而是ArrayList<User>,那么该怎么解析啊,因为这个太常见了。
要解决这个问题,得先弄明白集合用json该怎么表示,简单来讲“{}”表示一个对象,“[]”表示一个集合,集合里面可以有多个对象,这样表示[{},{},{}]。OK,那么看实战代码,
json数据:
 
Java代码 
private String jsonDataUsers = "[{\"name\":\"Jack\",\"age\":20},{\"name\":\"Tom\",\"age\":22},{\"name\":\"Ian\",\"age\":20}]"; 
 解析代码:
 
Java代码 
public void parseUserFromJson(String jsonData) { 
 
        Type typeList = new TypeToken<ArrayList<User>>(){}.getType(); 
        Gson gson = new Gson(); 
        LinkedList<User> users = gson.fromJson(jsonData, typeList); 
        for(Iterator<User> iterator = users.iterator(); iterator.hasNext();) { 
            User user = iterator.next(); 
            System.out.println("name---------->" + user.getName()); 
            System.out.println("age---------->" + user.getAge()); 
        } 
    } 
 
我们可以看到,只是多了一行“Type typeList = new TypeToken<ArrayList<User>>(){}.getType();”,就可以解析出List来,然后迭代List就可以得到整个数据
了,真的很方便,还等什么呢,赶快试试看吧!

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Android 完全退出程序
    • 原创:Android应用开发-Andorid歌词秀,含源码
    • android 屏幕保护
    • Android手机软件汉化教程---第四课 dex文件汉化
    • 众多Android 开源项目推荐,给力工作给力学习
    • Android Audio代码分析4
    • Android得到已安装的应用程序信息!
    • Android开发者指南(29) —— USB Host and Accessory
    • Android成长的幕后推手:工程师鲁宾
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1