Java开发基础——JSON数据的构造与解析(二)

来源:互联网 发布:京瓷1020扫描软件 编辑:程序博客网 时间:2024/05/21 10:12
      在我们的第一篇博客《Java开发基础——JSON数据的构造与解析》中我们使用FastJSON这个包来对JSON字符串做解析,使用起来非常方便,但是在实际使用中,FastJSON还需要做很多事情,比如对象与JSON字符串的转化,JSON与List等集合对象的转换等,该篇博客将会来使用FastJSON更细节的功能。
  • JSON字符串数组转化为JSONArray
其实JSON.parseArray的功能和JSONArray.parseArray的功能是一样的,最好在代码中统一使用某种调用风格。使用该方法需要原先的字符串是一个JSON数组,即最外面是[]中括号。JSONArray里面是JSONObject对象。只要转化为JSONArray或者JSONObject,就可以很容易进行解析。

/**
* 解析JSON字符串数组,中括号表示的是数组,大括号表示的是对象
* @param args
*/
public static void main(String[] args) {
    //JSON.parseArray的作用等同于JSONArray.parseArray
    String jsonString = "[{\"type\":\"Boolean\",\"value1\":\"true\",\"value2\":\"false\"}]";
    JSONArray jsonArray = JSON.parseArray(jsonString);
    System.out.println("jsonArray:" + jsonArray);

    JSONArray jsonArray1 = JSONArray.parseArray(jsonString);
    System.out.println("jsonArray1:" + jsonArray1);

    for (int i = 0; i < jsonArray.size(); i++) {
        System.out.println("1" + jsonArray.get(i));
        JSONObject jsonObject = (JSONObject) jsonArray.get(i);
        System.out.println("2" + jsonObject);

        String type = jsonObject.getString("type");
        System.out.println("type:" + type);

        String value = jsonObject.getString("value1");
        System.out.println("value1:" + value);

        String mayvalue = jsonObject.getString("value2");
        System.out.println("value2:" + mayvalue);
    }
}


  • JSON字符串对象解析为JSONArray抛出异常
JSON.parseArray只能解析数组[],而不能是一个对象{},所以这里会抛出异常。

/**
* 这里会抛出异常,因为parseArray接收的不是一个数组
* @param args
*/
public static void main(String[] args) {
    String jsonString = "{\"type\":\"Boolean\",\"value1\":\"true\",\"value2\":\"false\"}";
    JSONArray jsonArray = JSON.parseArray(jsonString);
    System.out.println("jsonArray:" + jsonArray);

    for (int i = 0; i < jsonArray.size(); i++) {
        System.out.println("1" + jsonArray.get(i));
        JSONObject jsonObject = (JSONObject) jsonArray.get(i);
        System.out.println("2" + jsonObject);

        String type = jsonObject.getString("type");
        System.out.println("type:" + type);

        String value = jsonObject.getString("value1");
        System.out.println("value1:" + value);

        String mayvalue = jsonObject.getString("value2");
        System.out.println("value2:" + mayvalue);
    }
}


抛出异常如下:



  • JSON字符串数组解析成JSONObject抛出异常
这里传入的是json字符串数组,不能使用JSON.parseObject去进行解析。

/**
* 这里也会抛出异常,jsonArray不能强转成jsonObject
* @param args
*/
public static void main(String[] args) {
    String jsonString = "[{\"type\":\"Boolean\",\"value1\":\"true\",\"value2\":\"false\"}]";

    JSONObject jsonObject = JSON.parseObject(jsonString);
    System.out.println("jsonObject:" + jsonObject);
}


抛出异常如下:



  • JSON字符串对象解析成JSONObject

JSON.parseObject和JSONObject.parseObject的使用也尽量在项目中统一,基本功能一样。
/**
* 解析JSON对象,JSON.parseObject等同于JSONObject.parseObject
* @param args
*/
public static void main(String[] args) {

    String jsonString = "{\"type\":\"Boolean\",\"value1\":\"true\",\"value2\":\"false\"}";

    JSONObject jsonObject = JSON.parseObject(jsonString);
    System.out.println("jsonObject:" + jsonObject);

    JSONObject jsonObject1 = JSONObject.parseObject(jsonString);
    System.out.println("jsonObject1:" + jsonObject1);
}



  • POJO对象,List集合,Map集合转化为JSONString
这里先写一个很简单的POJO类Person:

public class Person {

    private String name;
    private String age;

    public Person() {
    }

    public Person(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}


下面将会分别实现Person对象、List<String>、List<Person>、Map<String, String>、Map<String, Person>转化为JSONString(其实就是String),使用的方法是JSON.toJSONString.

/**
* 这里的案例是把对象转化成JSON字符串;
* @param args
*/
public static void main(String[] args) {

    //单个对象转化为JSONString
    Person person01 = new Person("chenyufeng","14");

    String s = JSON.toJSONString(person01);
    System.out.println("s:" + s);

    //List对象转化为JSONString
    List<String> list1 = new ArrayList<String>();
    list1.add("1111");
    list1.add("2222");
    list1.add("3333");

    String s3 = JSON.toJSONString(list1);
    System.out.println("s3:" + s3);

    //List对象转化为JSONString
    Person person02 = new Person("chenyufeng2","142");
    Person person03 = new Person("chenyufeng3","143");
    List<Person> list = new ArrayList<Person>();
    list.add(person01);
    list.add(person02);
    list.add(person03);

    String s1 = JSON.toJSONString(list);
    System.out.println("s1:" + s1);

    //Map对象转化为JSONString
    Map<String, String> map = new HashMap<String, String>();
    map.put("1", "chenyufeng");
    map.put("2", "gaowenjing");
    String s2 = JSON.toJSONString(map);
    System.out.println("s2:" + s2);

    //Map对象转化为JSONString
    Map<String, Person> map1 = new HashMap<String, Person>();
    map1.put("1", person01);
    map1.put("2", person02);
    map1.put("3", person03);
    String s4 = JSON.toJSONString(map1);
    System.out.println("s4:" + s4);
}




  • JSON字符串对象转化为POJO类对象
这种逆向转化也是可以实现的,方法是JSON.parseObject(string, clazz);

/**
* JSON字符串可以转化为POJO类对象;
* @param args
*/
public static void main(String[] args) {

    Person person = new Person("chenyufeng", "12");
    String s = JSON.toJSONString(person);
    System.out.println("s:" + s);

    Person person1 = JSON.parseObject(s, Person.class);
    System.out.println("person:" + person1.toString());
}



  • JSON字符串数组对象转化为List<T>对象
这种操作也可以互逆的,使用的方法是JSON.parseArray(string, clazz);

/**
* JSON数组字符串转化为List<T>对象;
* @param args
*/
public static void main(String[] args) {
    Person person = new Person("chen", "12");
    Person person1 = new Person("yufeng","24");

    List<Person> list = new ArrayList<Person>();
    list.add(person);
    list.add(person1);

    String s = JSON.toJSONString(list);
    System.out.println("s:" + s);

    List<Person> list1 = JSON.parseArray(s, Person.class);
    System.out.println("list1:" + list1.toString());
}



阅读全文
1 1
原创粉丝点击