JSON(JavaScript Object Notation)内容详解(Android操作JSON)

1. 什么是 JSON

      JSON概念很简单,JSON 是一种轻量级的数据格式,他基于 javascript语法的子集,即数组和对象表示。由于使用的是 javascript 语法,因此JSON 定义可以包含在javascript文件中,对其的访问无需通过基于 XML 的语言来额外解析。不过在使用 JSON 之前,很重要的一点是理解 javascript中数组及对象字面量的特殊语法。

1.1 数组字面量

         数组字面量,是用一对方括号括起一组用逗号隔开的 javascript 值,例如:

        var aNames=["hello", 12, true , null];

1.2 对象字面量

        对象字面量,是通过两个花括号来定义的。在花括号内可以放置任意数量的“名称-值”对,定义格 式字符串值”。除了最后一行外,每个“名称-值”对后必须有一个逗号(这与Perl 中的联合数组的定义有些类似)。例如:

        var oCar = {

               "color": "red",       

              "doors" : 4,

               "paidFor" : true

        };

1.3 混合字面量

      我们可以混用对象和数组字面量,来创建一个对象数组,或一个包含数组的对象。例如:

{comments:[
{
id:1,
author:"someone1",
url:"http://someone1.x2design.net",
content:"hello"
},
{
id:2,
author:"someone2",
url:"http://someone2.x2design.net",
content:"hello"
},
{
id:3,
author:"someone3",
url:"http://someone3.x2design.net",
content:"hello"
}
]};


1、JSON是用来进行服务器和客户端数据传输的

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

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

JSON PK XML哪个更好?

JSON相对于XML来讲解析稍微方便一些。

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

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

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

JSON与JavaScript的交互更加方便

JSON对数据的描述性相对于XML较差

一个JSON的例子:

  
  1.   
  2.     "name":"Michael";  
  3.   
  4.     "address":  
  5.   
  6.     {  
  7.   
  8.         "city":"Beijing",  
  9.   
  10.         "street":"Chaoyang Road",  
  11.   
  12.         "postcode":100025  
  13.   
  14.       }  
  15.   
  16. }  

说明:JSON官方网站:http://www.json.org/

Google JSON类库:http://code.google.com/p/google-gson/

看下面的例子:

Activity类:

 
  1. public class MainActivity extends Activity {  
  2.     private String jsonData = "[{\"name\":\"Michael\",\"age\":20},{\"name\":\"Mike\",\"age\":21}]";  
  3.     private Button button ;  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.         button = (Button)findViewById(R.id.buttonId);  
  9.         button.setOnClickListener(new ButtonListener());  
  10.     }  
  11.       
  12.     private class ButtonListener implements OnClickListener {  
  13.   
  14.         public void onClick(View v) {  
  15.             JsonUtils jsonUtils = new JsonUtils();  
  16.             jsonUtils.parseJson(jsonData);  
  17.         }  
  18.           
  19.     }  
  20. }  

工具类:

 

  1. public class JsonUtils {  
  2.     public void parseJson(String jsonData){  
  3.         try{  
  4.             //如果需要解析JSON数据,首要要生成一个JsonReader对象  
  5.             JsonReader reader = new JsonReader(new StringReader(jsonData));  
  6.             //开始解析数组  
  7.             reader.beginArray();  
  8.             //判断是否下一个JSON对象  
  9.             while(reader.hasNext()){  
  10.                 //开始解析对象  
  11.                 reader.beginObject();  
  12.                 //判断有没键值对  
  13.                 while(reader.hasNext()){  
  14.                     //得到下一个键  
  15.                     String tagName = reader.nextName();  
  16.                     if(tagName.equals("name")){  
  17.                         //得到键所对应的值  
  18.                         System.out.println("name--->" + reader.nextString());  
  19.                     }  
  20.                     else if(tagName.equals("age")){  
  21.                         System.out.println("age--->" + reader.nextInt());  
  22.                     }  
  23.                 }  
  24.                 //解析对象结束  
  25.                 reader.endObject();  
  26.             }  
  27.             //解析数组结束  
  28.             reader.endArray();  
  29.         }  
  30.         catch(Exception e){  
  31.             e.printStackTrace();  
  32.         }  
  33.     }  
  34. }  

一个JSON:[{"name":"zhangsan","age":20},{"name":"lisi","age":30}]
步骤:

1>开始解析数组

2>开始解析对象

3>解析键值对

4>解析键值对

5>解析对象结束

6>开始解析对象

7>解析键值对

8>解析键值对

9>解析对象结束

10>解析数组结束

只要理解上面的解析流程,学习JSON应该不是很难。

在看下面的这个例子:

User.java类

 

  1. public class User {  
  2.     private String name ;  
  3.     private int age ;  
  4.     public String getName() {  
  5.         return name;  
  6.     }  
  7.     public void setName(String name) {  
  8.         this.name = name;  
  9.     }  
  10.     public int getAge() {  
  11.         return age;  
  12.     }  
  13.     public void setAge(int age) {  
  14.         this.age = age;  
  15.     }  
  16. }  
JsonUtils类:

 

  1. public class JsonUtils {  
  2.       
  3.     public void parseUserFromJson(String jsonData){  
  4.         Gson gson = new Gson();  
  5.         User user = gson.fromJson(jsonData, User.class);  
  6.         System.out.println("name--->" + user.getName());  
  7.         System.out.println("age---->" + user.getAge());  
  8.           
  9.     }  
  10. }  
MainActivity.java类:

 
  1. public class MainActivity extends Activity {  
  2.     private Button button = null;  
  3.     private String jsonData = "{\"name\":\"Michael\",\"age\":20}";  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.main);  
  8.         button = (Button)findViewById(R.id.buttonId);  
  9.         button.setOnClickListener(new ButtonListener());  
  10.     }  
  11.       
  12.     private class ButtonListener implements OnClickListener{  
  13.   
  14.         public void onClick(View v) {  
  15.             JsonUtils jsonUtils = new JsonUtils();  
  16.             jsonUtils.parseUserFromJson(jsonData);  
  17.         }  
  18.           
  19.     }   
  20. }  
JsonUtils类:

 
  1. public class JsonUtils {  
  2.       
  3.     public void parseUserFromJson(String jsonData){  
  4.         /* 
  5.          *  This is the main class for using Gson. 
  6.          *  Gson is typically used by first constructing a Gson instance  
  7.          *  and then invoking toJson(Object) or fromJson(String, Class) methods on it 
  8.          */  
  9.         Gson gson = new Gson();  
  10.           
  11.         /*public <T> T fromJson(String json, 
  12.                  *            Type typeOfT) 
  13.                  *        throws JsonSyntaxException 
  14.          * This method deserializes the specified Json into an object of the specified type 
  15.          *  json - the string from which the object is to be deserialized 
  16.                  *  typeOfT - The specific genericized type of src. You can obtain this type by using the TypeToken class. For example, to get the type for Collection<Foo>, you should use: 
  17.                  *  Type typeOfT = new TypeToken<Collection<Foo>>(){}.getType(); 
  18.          */  
  19.         User user = gson.fromJson(jsonData, User.class);  
  20.         System.out.println("name--->" + user.getName());  
  21.         System.out.println("age---->" + user.getAge());  
  22.           
  23.     }  
  24. }  
在往下看这个例子:

MainActivity.java和User.java同上,JsonUtils.java代码如下:

 

  1. public class JsonUtils {  
  2.       
  3.     public void parseUserFromJson(String jsonData){  
  4.         Type listType = new TypeToken<LinkedList<User>>(){}.getType();  
  5.         Gson gson = new Gson();  
  6.         LinkedList<User> users = gson.fromJson(jsonData, listType);  
  7.         for (Iterator iterator = users.iterator(); iterator.hasNext();) {  
  8.             User user = (User) iterator.next();  
  9.             System.out.println("name--->" + user.getName());  
  10.             System.out.println("age---->" + user.getAge());  
  11.         }  
  12.           
  13.     }  
  14. }  
上面的代码让你一步一步深入学习JSON各种操作方法!

你可能感兴趣的:(JavaScript,android,json)