当前位置:编程学习 > JS >>

工作点滴之Json解析

    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该怎么表示,简单来讲“{}&

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,