宇筱博客

  • 解决办法
  • 学无止境
  • 记录时光
  • 百宝箱
宇筱博客
点滴记忆,汇聚成海。
  1. 首页
  2. 解决办法
  3. 正文

Java解析JSON数据

2016年1月1日 782点热度 0人点赞 0条评论

前面介绍了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数据的键值Java代码 

/**
 * 保存用户数据的模型类
 * @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数据的方法Java代码 

/**
     * 根据一个User对象数组创建json数据,每个user对象为一个json数据,user对象中每个字段为json数据的字段内容
     *
     * @param users
     *            
     * @return user对象的数组
     */
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;
}

(三)测试代码Java代码 

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数据

(一)解析方法Java代码 

/**
     * 通过传入的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;
}

(二)测试代码Java代码 

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

原文链接:Java解析JSON数据 - WillYoung - ITeye博客

标签: 暂无
最后更新:2022年3月24日

小渔民

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2025 宇筱博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备15017825号-2