Java解析JSON数据


前面介绍了XML的几种解析方法,可以看到,XML格式的数据本身比较重量级,虽然逻辑层次分明,但如果传输一些简单的数据,可能会消耗更多的网络带宽,因此,本博文将介绍一种更加轻量级的数据传输格式——JSON数据。

 

一、JSON的介绍

(一)简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#Java、JavaScript、PerlPython等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

 

(二)语法规则

JSON 语法是 JavaScript 对象表示语法的子集。

       数据在键值对中

       数据由逗号分隔

       花括号保存对象

       方括号保存数组

实例:

(1)名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:

“userName” : "Bill"

(2)一条完整的json数据

{"userPwd":"123","userName":"Bill","age":22}

(3)多条json数据进行传输的格式,即[{},{},{}],一个{}表示一条完整的json数据

[{"userPwd":"123","userName":"Bill","age":22},{"userPwd":"234","userName":"Tom","age":21},{"userPwd":"345","userName":"John","age":23}]

 

(三)JSON数据与Java类

从上可以看出,一条json数据是有多个键值对组成的,所以可以将该键值对作为java类的字段,这样在解析的时候可以将其保存起来,如上述中可以提炼出每条json数据都有userName,userPwd,age。因此可以将这三个属性作为Java类,如User的三个字段即可。

 

二、利用Java创建JSON数据

 很多时候,JSON数据都是用来传输数据,所以json当中的每个字段多是动态生成的,这里,假设我们需要传输几个User对象,每个User有userName,userPwd,age三个字段。所以首先需要创建一个User模型类

(一)创建User.java,用于保存一条json数据的键值

Java代码
  1. /** 
  2.  * 保存用户数据的模型类 
  3.  *  
  4.  * @author Bill56 
  5.  * 
  6.  */  
  7. public class User {  
  8.   
  9.     // 用户名  
  10.     private String userName;  
  11.   
  12.     // 密码  
  13.     private String userPwd;  
  14.   
  15.     // 年龄  
  16.     private int age;  
  17.   
  18.     /** 
  19.      * 不带形参的构造方法 
  20.      */  
  21.     public User() {  
  22.         super();  
  23.     }  
  24.   
  25.     /** 
  26.      * 带参数的构造方法 
  27.      *  
  28.      * @param userName 
  29.      *            用户名 
  30.      * @param userPwd 
  31.      *            密码 
  32.      * @param age 
  33.      *            年龄 
  34.      */  
  35.     public User(String userName, String userPwd, int age) {  
  36.         super();  
  37.         this.userName = userName;  
  38.         this.userPwd = userPwd;  
  39.         this.age = age;  
  40.     }  
  41.   
  42.     public String getUserName() {  
  43.         return userName;  
  44.     }  
  45.   
  46.     public void setUserName(String userName) {  
  47.         this.userName = userName;  
  48.     }  
  49.   
  50.     public String getUserPwd() {  
  51.         return userPwd;  
  52.     }  
  53.   
  54.     public void setUserPwd(String userPwd) {  
  55.         this.userPwd = userPwd;  
  56.     }  
  57.   
  58.     public int getAge() {  
  59.         return age;  
  60.     }  
  61.   
  62.     public void setAge(int age) {  
  63.         this.age = age;  
  64.     }  
  65.   
  66.     @Override  
  67.     public String toString() {  
  68.         return "User [userName=" + userName + ", userPwd=" + userPwd + ", age=" + age + "]";  
  69.     }  
  70.   
  71. }  

 

(二)创建json数据的方法

Java代码
  1. /** 
  2.      * 根据一个User对象数组创建json数据,每个user对象为一个json数据,user对象中每个字段为json数据的字段内容 
  3.      *  
  4.      * @param users 
  5.      *            user对象的数组 
  6.      * @return 
  7.      */  
  8.     private static String createJSON(User[] users) {  
  9.         // 创建一个保存json数据内容的字符串  
  10.         String jsonInfo = new String();  
  11.         // 创建json格式的数据对象,该对象是一个包含n个json数据对象的集合  
  12.         try {  
  13.             JSONArray jsonArray = new JSONArray();  
  14.             // 循环User对象数组,根据每一个对象生成一个json数据,再将生成好的json数据放到jsonArray中去  
  15.             for (int i = 0; i < users.length; i++) {  
  16.                 // 创建一个json类,对应User对象  
  17.                 JSONObject jsonUser = new JSONObject();  
  18.                 // 将user中每个字段的值放入jsonUser中  
  19.                 jsonUser.put("userName", users[i].getUserName());  
  20.                 jsonUser.put("userPwd", users[i].getUserPwd());  
  21.                 jsonUser.put("age", users[i].getAge());  
  22.                 // 将jsonUser放入jsonArray  
  23.                 jsonArray.put(jsonUser);  
  24.             }  
  25.             // 将jsonArray编程json字符串  
  26.             jsonInfo = jsonArray.toString();  
  27.         } catch (JSONException e) {  
  28.             // TODO Auto-generated catch block  
  29.             e.printStackTrace();  
  30.         }  
  31.         return jsonInfo;  
  32.     }  

 

(三)测试代码

Java代码
  1. public static void main(String[] args) {  
  2.         // 创建几个User对象  
  3.         User[] users = new User[] { new User("Bill""123"22), new User("Tom""234"21),  
  4.                 new User("John""345"23) };  
  5.         String data = createJSON(users);  
  6.         System.out.println(data);  
  7.     }  

 

三、利用Java解析json数据

(一)解析方法

Java代码  
  1. /** 
  2.      * 通过传入的json字符串数据解析json数据,并保存到User的列表中 
  3.      *  
  4.      * @param jsonData 
  5.      *            json数据 
  6.      * @return 解析完json数据后保存的User列表对象 
  7.      */  
  8.     private static ArrayList<User> parseJSON(String jsonData) {  
  9.         ArrayList<User> usersList = new ArrayList<>();  
  10.         try {  
  11.             // 将json字符串转成jsonArray对象  
  12.             JSONArray jsonArray = new JSONArray(jsonData);  
  13.   
  14.             // 解析jsonArray中的每一个json数据  
  15.             for (int i = 0; i < jsonArray.length(); i++) {  
  16.                 // 获取一个json数据对象  
  17.                 JSONObject jsonObject = jsonArray.getJSONObject(i);  
  18.                 // 获取对应的值  
  19.                 String userName = jsonObject.getString("userName");  
  20.                 String userPwd = jsonObject.getString("userPwd");  
  21.                 int age = jsonObject.getInt("age");  
  22.                 // 根据解析的值创建一个User对象  
  23.                 User user = new User(userName, userPwd, age);  
  24.                 // 将解析后的对象添加到User列表中  
  25.                 usersList.add(user);  
  26.             }  
  27.         } catch (JSONException e) {  
  28.             // TODO Auto-generated catch block  
  29.             e.printStackTrace();  
  30.         }  
  31.         return usersList;  
  32.     }  

 

(二)测试代码

Java代码
  1. public static void main(String[] args) {  
  2.         // 创建几个User对象  
  3.         User[] users = new User[] { new User("Bill""123"22), new User("Tom""234"21),  
  4.                 new User("John""345"23) };  
  5.         String data = createJSON(users);  
  6.         System.out.println(data);  
  7.         // 解析json数据  
  8.         ArrayList<User> list = parseJSON(data);  
  9.         System.out.println(list);  
  10.     }  

 

 

原文出处:http://bill56.iteye.com/blog/2273337


欢迎留言