[转载]Android开发-Json解析-Android新手入门-eoe Android开发者社区_Android开发论坛

[转载]Android开发-Json解析-Android新手入门-eoe Android开发者社区_Android开发论坛.

  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就可以得到整个数据

了,真的很方便,还等什么呢,赶快试试看吧!

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏