java解析json_Java解析JSON数据

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

一、JSON的介绍

(一)简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使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数据的键值

/**

* 保存用户数据的模型类

*

* @author Bill56

*

*/

public class User {

// 用户名

private String userName;

// 密码

private String userPwd;

// 年龄

private int age;

/**

* 不带形参的构造方法

*/

public User() {

super();

}

/**

* 带参数的构造方法

*

* @param userName

* 用户名

* @param userPwd

* 密码

* @param age

* 年龄

*/

public User(String userName, String userPwd, int age) {

super();

this.userName = userName;

this.userPwd = userPwd;

this.age = age;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getUserPwd() {

return userPwd;

}

public void setUserPwd(String userPwd) {

this.userPwd = userPwd;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public 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);

}

谢谢您的关注和阅读,文章不当之处还请您不吝赐教~~~

a7602bb6fc46d0669cc00223cb0b3d80.gif

a7602bb6fc46d0669cc00223cb0b3d80.gif

a7602bb6fc46d0669cc00223cb0b3d80.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值