首页 > 编程知识 正文

java解析复杂json格式数据,java如何解析json数据

时间:2023-05-04 07:07:19 阅读:149910 作者:4128

前面介绍了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);

}

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。