前面介绍了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<User> parseJSON(String jsonData) { ArrayList<User> 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<User> list = parseJSON(data); System.out.println(list); }
谢谢您的关注和阅读,文章不当之处还请您不吝赐教~~~
相关推荐
使用该方法可以轻松解析JSON数组,方便取出JSON数据
使用JAVA解析JSON数据,代码不多,简单明了.
Java解析json数据,附有源码和jar包。
通过jsononject和jsonarray解析json数据,并实现完整的输出
JAVA解析JSON数据代码需要的多个jar包
附件内容为:Java组装map数据,然后转换为json数据格式;Java解析json数据
此压缩包包含两个jar:json-lib-2.4-jdk15.jar和ezmorph-1.0.6.jar 这两个包都是java解析json数据的依赖包,而且是最新版,开源的东东好多人还要分,俺不要分,只希望对你有用。
java解析Json数据常用的两个解析库,实例分析.docxjava解析Json数据常用的两个解析库,实例分析.docx
java解析Json数据常用的两个解析库,实例分析 (2).docxjava解析Json数据常用的两个解析库,实例分析 (2).docx
该包适用于java开发中解析json数据格式的工具包,提供一系列API,方便开发者直接使用该包提供的api解析josn格式的数据。
阿里巴巴的一款java解析json的jar包,fastjson,方便简单实用!
主要介绍了Java使用JSONPath解析JSON完整内容详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
JAVA,解析,JSON,数据(包齐全)
commons-beanutils.jar commons-collections-3.2.jar commons-httpclient-3.1.jar commons-lang-2.4.jar commons-logging.jar ...json-lib-2.4-jdk15.jar morph-1.1.1.jar xom1.1.jar 以上所有的jar文件都有
java获取网络json数据包和解析json数据完整案例。 需要用到json.org也包含在里边。
C#的一个解析JSON的工具类,像java一样优雅的解析JSON数据,包含有JSONObject和JSONArray对象。 JSONObject json = new JSONObject(); json.Put("sex", "男"); json.Put("age", 123); json.Put("name", "张三"); ...
将文件下载后解压缩,将获取到的jar包添加到java工程中,然后就可以进行调用了。
好用的json包,更容易解析json数据结构
压缩包里面有两个文档,里面的代码是一样的,只是两种文档格式。。。方法不需要修改传json参数就行了,会返回解析好的数据
JAVA在线接收解析JSON数据,引用的JSON类为 net.sf.json.JSONArray; net.sf.json.JSONObject;