您的位置:澳门402永利com > 计算机 网络 > JSON字符串和java对象的互转

JSON字符串和java对象的互转

发布时间:2019-11-01 20:00编辑:计算机 网络浏览(50)

    JSON字符串和java对象的互转【json-lib】,jsonjson-lib

    在支付过程中,日常须要和其余系统交流数据,数据调换的格式有XML、JSON等,JSON作为三个轻量级的数码格式比xml功用要高,XML需求广大的价签,那无疑占领了网络流量,JSON在这里上头则做的很好,上边先看下JSON的格式,

    JSON能够有三种格式,豆蔻梢头种是指标格式的,另后生可畏种是数组对象,

    {"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串
    

     

    [{"name":"JSON","address":"北京市西城区","age":25}]//数据对象格式
    

    从下边包车型的士三种格式可以观察对象格式和数组对象格式唯豆蔻年华的不如则是在对象格式的根底上加上了[],再来看现实的协会,能够观察都以以键值对的款式出现的,中间以拉脱维亚语状态下的逗号(,)分隔。

    在前者和后端进行多少传输的时候这种格式也是备受招待的,后端重回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串拆解解析为json对象,然后进行遍历,供前端选拔。

    下边踏向正题,介绍在JAVA中JSON和java对象之间的互转。

    要想完成JSON和java对象时期的互转,需求信赖第三方jar包,这里运用json-lib这些jar包,下载地址为:

    json-lib提供了几个类能够做到此意义,例,JSONObject、JSONArray。从类的名字上能够看来JSONObject转变的应该是指标格式的,而JSONArray转变的则应当是数组对象(即,带[]形式)的。

    生机勃勃、java普通对象和json字符串的互转

      java对象--》》字符串

    java普通对象指的是java中的二个java bean,即多少个实体类,如,

    package com.cn.study.day3;
    
    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-lib怎么样把它转载为字符串格局,

    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字符串,上面看打字与印刷的结果,

    strJson:{"address":"北京市西城区","age":"23","name":"JSON"}
    strArray:[{"address":"北京市西城区","age":"23","name":"JSON"}]
    

    从结果中能够看到三种办法都能够把java对象转变为JSON字符串,只是转变后的组织差别。

      JSON字符串--》》java对象

    地点表达了什么样把java对象转变为JSON字符串,下边看怎么样把JSON字符串格式转变为java对象,

    第风流浪漫须求定义二种分化格式的字符串,需求利用对双引号进行转义,

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

    打字与印刷结果为:

    stu:Student [name=JSON, age=24, address=北京市西城区]
    stu2:Student [name=JSON, age=24, address=北京市西城区]
    

    从地点的代码中能够看见,使用JSONObject能够轻便的把JSON格式的字符串转变为java对象,但是接受JSONArray就没那么轻松了,因为它有“[]”符号,所以我们这里在获得了JSONArray的对象之后,取其首先个要素即大家须要的一个student的变形,然后使用JSONObject轻易获取。

    二、list和json字符串的互转

    list--》》json字符串

     

    public static void listToJSON(){
            Student stu=new Student();
            stu.setName("JSON");
            stu.setAge("23");
            stu.setAddress("北京市海淀区");
            List<Student> lists=new ArrayList<Student>();
            lists.add(stu);
            //1、使用JSONObject
            //JSONObject listObject=JSONObject.fromObject(lists);
            //2、使用JSONArray
            JSONArray listArray=JSONArray.fromObject(lists);
    
            //System.out.println("listObject:"+listObject.toString());
            System.out.println("listArray:"+listArray.toString());
    
        }
    

    自个儿把施用JSONObject的主意给注掉了,大家先看注释此前的结果,

    Exception in thread "main" net.sf.json.JSONException: 'object' is an array. Use JSONArray instead
    

    告诉自个儿说有贰个十分,通过翻看源码开采,在行使fromObject方法的时候会先进行参数类型的剖断,这里就报告大家,传入的参数是二个array类型,因为使用的ArrayList,再来看,注释之后的结果,

    listArray:[{"address":"北京市海淀区","age":"23","name":"JSON"}]
    

    诸有此类结果是健康的。
    json字符串--》》list

    从上面的例证能够看出list的靶子只好中间转播为数组对象的格式,那么大家看上面的字符串到list的中间转播,

    public static void jsonToList(){
            String arrayStr="[{"name":"JSON","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);
                    }
    
    
        }
    

    打字与印刷结果,

    Student [name=JSON, age=24, address=北京市西城区]
    Student [name=JSON, age=24, address=北京市西城区]
    

    出于字符串的格式为带有“[]”的格式,所以这里选取JSONArray那一个目的,它有toArray、toList方法可供使用,前面二个转变为java中的数组,大概转载为java中的list,由于此地有实体类进行对应,所以在选拔时钦命了泛型的品种(Student.class),那样就能够获得转变后的目的。

    三、map和json字符串的互转

    map--》》json字符串

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

    打字与印刷结果,

    mapObject{"first":{"address":"中国上海","age":"23","name":"JSON"}}
    mapArray:[{"first":{"address":"中国上海","age":"23","name":"JSON"}}]
    

    上边打字与印刷了三种方式。

    json字符串--》》map

    JSON字符串不可能直接倒车为map对象,要想博得map中的键对应的值需求其余办法,

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

    打字与印刷结果,

    Student [name=JSON, age=23, address=中国上海]
    

    下面是MyBean的代码,

    package com.cn.study.day4;
    
    import java.util.Map;
    
    import com.cn.study.day3.Student;
    
    public class MyBean {
    
        private Student first;
    
        public Student getFirst() {
            return first;
        }
    
        public void setFirst(Student first) {
            this.first = first;
        }
    
    
    
    }
    

    运用toBean()方法是传播了多少个参数,第贰个是JSONObject对象,第一个是MyBean.class,第八个是一个Map对象。通过MyBean可以知晓此类中要有三个first的属性,且其种类为Student,要和map中的键和值类型对应,即,first对应键 first类型对应值的门类。

    至于复杂的JSON串转变为java对象的内容,在下篇中会继续申明。

    本篇,首要表明了java中的bean、list、map和JSON的互转

    有不正之处招待建议。多谢!

    应接关切下后生可畏篇内容!

    在付出进度中,常常要求和别的系统交流数据,数据沟通的格式有XML、JSON等,JSON作为贰个...

    本文由澳门402永利com发布于计算机 网络,转载请注明出处:JSON字符串和java对象的互转

    关键词:

上一篇:预加载内容

下一篇:没有了