前面介绍了XML的几种分析方法,XML格式的数据本身比较重,逻辑层次很清晰,但是传输简单的数据可能会消耗很多网络带宽,所以本文将更轻量级的数据传输格式——JSON数据
一. JSON简介
(一)个人资料
Jon(JavaScriptobjectnotation )是一种轻量级的数据交换格式。 基于ECMAScript的子集。 JSON采用完全独立于语言的文本格式,但也使用类似于C语言族的习惯,如C、c、C#、Java、JavaScript、Perl和Python。 这些特性使JSON成为理想的数据交换语言。 人容易阅读、书写,而且机械分析和生成也很容易。 一般用于提高网络传输速度。
(二)语法规则
JSON语法是JavaScript对象表示语法的子集。
数据位于键值对中
数据用逗号隔开
大括号保存对象
方括号保存数组
实例:
(1)名称/值对组合中的名称在前(在双引号中),值对在后) )同样在双引号中),之间请用冒号分隔。
“用户名称”:'bill '
)2)完整的json数据
{'userPwd':'123 ',' userName':'Bill ',' age':22}
)3)传输多个json数据的形式,即()、()、) ),一个)表示一个完整的json数据
[{'userPwd':'123 ',userName':'Bill ',age':22},{'userPwd':'234 ',username'332}
(三) JSON数据和Java类
如上所示,一个json数据由多个键值对组成,因此可以将该键值对作为java类的字段,并在分析时保存。 可以如上所述提取每个json数据都有userName、userPwd和age。 因此,可以将这三个属性用作Java类,就像用户的三个字段一样。
二.用Java制作JSON数据
由于JSON数据通常用于传输数据,因此JSON中的每个字段往往是动态生成的。 这里假设您需要传输一些User对象。 每个用户都有三个字段: userName、userPwd和age。 首先需要创建User模型类
(一)创建用于保存json数据键值的User.java
//*
*保存用户数据的模型类
*
* @author Bill56
*
*/
公共类用户{
//用户名
私有字符串用户名称;
//密码
私有字符串用户;
//年龄
私有输入;
//*
*无形的结构方法
*/
公共用户() }
super (;
}
//*
*带参数的结构方法
*
* @param userName
*用户名
* @param userPwd
*密码
* @param age
*年龄
*/
公共用户(string username,String userPwd,int age ) {
super (;
this.userName=userName;
this.userPwd=userPwd;
this.age=age;
}
公共字符串获取名称
返回用户名称;
}
公共用户名称(字符串用户名称)。
this.userName=userName;
}
公共字符串获取用户(userpwd )
return userPwd;
}
publicvoidsetuserpwd (字符串用户)。
this.userPwd=userPwd;
}
公共获取页面() {
返回age;
}
公共语音设置(intage ) {
this.age=age;
}
@Override
普u
blic String toString() {return "User [userName=" + userName + ", userPwd=" + userPwd + ", age=" + age + "]";
}
}
(二)创建json数据的方法
/**
* 根据一个User对象数组创建json数据,每个user对象为一个json数据,user对象中每个字段为json数据的字段内容
*
* @param users
* user对象的数组
* @return
*/
private static String createJSON(User[] users) {
// 创建一个保存json数据内容的字符串
String jsonInfo = new String();
// 创建json格式的数据对象,该对象是一个包含n个json数据对象的集合
try {
JSONArray jsonArray = new JSONArray();
// 循环User对象数组,根据每一个对象生成一个json数据,再将生成好的json数据放到jsonArray中去
for (int i = 0; i < users.length; i++) {
// 创建一个json类,对应User对象
JSONObject jsonUser = new JSONObject();
// 将user中每个字段的值放入jsonUser中
jsonUser.put("userName", users[i].getUserName());
jsonUser.put("userPwd", users[i].getUserPwd());
jsonUser.put("age", users[i].getAge());
// 将jsonUser放入jsonArray
jsonArray.put(jsonUser);
}
// 将jsonArray编程json字符串
jsonInfo = jsonArray.toString();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonInfo;
}
(三)测试代码
public static void main(String[] args) {
// 创建几个User对象
User[] users = new User[] { new User("Bill", "123", 22), new User("Tom", "234", 21),
new User("John", "345", 23) };
String data = createJSON(users);
System.out.println(data);
}
三、利用Java解析json数据
(一)解析方法
/**
* 通过传入的json字符串数据解析json数据,并保存到User的列表中
*
* @param jsonData
* json数据
* @return 解析完json数据后保存的User列表对象
*/
private static ArrayList parseJSON(String jsonData) {
ArrayList usersList = new ArrayList<>();
try {
// 将json字符串转成jsonArray对象
JSONArray jsonArray = new JSONArray(jsonData);
// 解析jsonArray中的每一个json数据
for (int i = 0; i < jsonArray.length(); i++) {
// 获取一个json数据对象
JSONObject jsonObject = jsonArray.getJSONObject(i);
// 获取对应的值
String userName = jsonObject.getString("userName");
String userPwd = jsonObject.getString("userPwd");
int age = jsonObject.getInt("age");
// 根据解析的值创建一个User对象
User user = new User(userName, userPwd, age);
// 将解析后的对象添加到User列表中
usersList.add(user);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return usersList;
}
(二)测试代码
public static void main(String[] args) {
// 创建几个User对象
User[] users = new User[] { new User("Bill", "123", 22), new User("Tom", "234", 21),
new User("John", "345", 23) };
String data = createJSON(users);
System.out.println(data);
// 解析json数据
ArrayList list = parseJSON(data);
System.out.println(list);
}
谢谢您的关注和阅读,文章不当之处还请您不吝赐教~~~