zoukankan      html  css  js  c++  java
  • java普通对象和json字符串的互转

    一、java普通对象和json字符串的互转

    java对象---->json

    首先创建一个java对象:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class Student {
        //姓名
        private String name;
        //年龄
        private String age;
        //住址
        private String address;
        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;
        }
        public String getAddress() {
        return address;
        }
        public void setAddress(String address) {
        this.address = address;
        }
        @Override
        public String toString() {
        return "Student [name=" + name + ", age=" + age + ", address="
        + address + "]";
        }
    }

      现在java对象转换为json形式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static void convertObject() {
            Student stu=new Student();
            stu.setName("JSON");
            stu.setAge("23");
            stu.setAddress("北京市西城区");
            //1、使用JSONObject
            JSONObject json = JSONObject.fromObject(stu);
            //2、使用JSONArray
            JSONArray array=JSONArray.fromObject(stu);
            String strJson=json.toString();
            String strArray=array.toString();
            System.out.println("strJson:"+strJson);
            System.out.println("strArray:"+strArray);
            }

      定义了一个Student的实体类,然后分别使用了JSONObject和JSONArray两种方式转化为JSON字符串,下面看打印的结果:

    json-->javabean

    上面说明了如何把java对象转化为JSON字符串,下面看如何把JSON字符串格式转化为java对象,

    首先需要定义两种不同格式的字符串,需要使用对双引号进行转义。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public static void jsonStrToJava(){
            //定义两种不同格式的字符串
            String objectStr="{"name":"JSON","age":"24","address":"北京市西城区"}";
            String arrayStr="[{"name":"JSON","age":"24","address":"北京市西城区"}]";
            //1、使用JSONObject
            JSONObject jsonObject=JSONObject.fromObject(objectStr);
            Student stu=(Student)JSONObject.toBean(jsonObject, Student.class);
            //2、使用JSONArray
            JSONArray jsonArray=JSONArray.fromObject(arrayStr);
            //获得jsonArray的第一个元素
            Object o=jsonArray.get(0);
            JSONObject jsonObject2=JSONObject.fromObject(o);
            Student stu2=(Student)JSONObject.toBean(jsonObject2, Student.class);
            System.out.println("stu:"+stu);
            System.out.println("stu2:"+stu2);
        }

      运行结果:

    从上面的代码中可以看出,使用JSONObject可以轻松的把JSON格式的字符串转化为java对象,但是使用JSONArray就没那么容易了,因为它有“[]”符号,所以我们这里在获得了JSONArray的对象之后,取其第一个元素即我们需要的一个student的变形,然后使用JSONObject轻松获得。

    二、list和json字符串的互转

    下面将list转化为json字符串:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static void convertListObject() {
            Student stu=new Student();
            stu.setName("JSON");
            stu.setAge("23");
            stu.setAddress("北京市西城区");
            Student stu2=new Student();
            stu2.setName("JSON2");
            stu2.setAge("23");
            stu2.setAddress("北京市西城区");
            //注意如果是list多个对象比需要使用JSONArray
            JSONArray array=JSONArray.fromObject(stu);
            String strArray=array.toString();
            System.out.println("strArray:"+strArray);
        }

      运行结果为:strArray:[{"address":"北京市西城区","name":"JSON","age":"23"},{"address":"北京市西城区","name":"JSON2","age":"23"}]

    如果使用JSONObject进行转换会出现:Exception in thread "main" net.sf.json.JSONException: 'object' is an array. Use JSONArray instead

    下面将json串转换为list

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public static void jsonToList(){
            String arrayStr="[{"name":"JSON","age":"24","address":"北京市西城区"},{"name":"JSON2","age":"24","address":"北京市西城区"}]";
            //转化为list
            List<Student> list2=(List<Student>)JSONArray.toList(JSONArray.fromObject(arrayStr), Student.class);
            for (Student stu : list2) {
            System.out.println(stu);
            }
            //转化为数组
            Student[] ss =(Student[])JSONArray.toArray(JSONArray.fromObject(arrayStr),Student.class);
            for (Student student : ss) {
            System.out.println(student);
            }
        }

      运行结果为:

     

    三、map和json字符串的互转

    map转化为json字符串

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static void mapToJSON(){
            Student stu=new Student();
            stu.setName("JSON");
            stu.setAge("23");
            stu.setAddress("中国上海");
            Map<String,Student> map=new HashMap<String,Student>();
            map.put("first", stu);
            //1、JSONObject
            JSONObject mapObject=JSONObject.fromObject(map);
            System.out.println("mapObject:"+mapObject.toString());
            //2、JSONArray
            JSONArray mapArray=JSONArray.fromObject(map);
            System.out.println("mapArray:"+mapArray.toString());
        }

      运行结果:

    json字符串转化为map:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static void jsonToMap(){
        String strObject="{"first":{"address":"中国上海","age":"23","name":"JSON"}}";
        //JSONObject
        JSONObject jsonObject=JSONObject.fromObject(strObject);
        Map map=new HashMap();
        map.put("first", Student.class);
        //使用了toBean方法,需要三个参数
        MyBean my=(MyBean)JSONObject.toBean(jsonObject, MyBean.class, map);
        System.out.println(my.getFirst());
    }  

    注意在转化为map的时候需要创建一个类,类里面需要有first属性跟json串里面的一样:

    使用toBean()方法是传入了三个参数,第一个是JSONObject对象,第二个是MyBean.class,第三个是一个Map对象。通过MyBean可以知道此类中要有一个first的属性,且其类型为Student,要和map中的键和值类型对应,即,first对应键 first类型对应值的类型。

    运行结果:

  • 相关阅读:
    稳定性「三十六计」- 无状态化
    设置默认的超时和重试是一个基础设施的基本素养
    「前任的50种死法」开发踩坑案例--慢就是错
    稳定性「三十六计」- 配额管控
    编写代码的「八荣八耻」- 以开关上线为荣,以自信编码为耻
    Kubernetes的DaemonSet(下篇)
    使用Elasticsearch的动态索引和索引优化
    Kubernetes的DaemonSet(上篇)
    程序媛的人生观
    Kubernetes的污点和容忍(下篇)
  • 原文地址:https://www.cnblogs.com/muhy/p/9885778.html
Copyright © 2011-2022 走看看