Java中常用数据类型与JSON格式互转

Java中关于数据类型转JSON格式主要有两种常用的方法

1.通过Jackson

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.2</version>
 </dependency>

2.通过Json-lib

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

3.举例:

public class Student {
    private int id;
    private String name;
    private int age;

    private List<String> interest;
    private List<Friend> friends;
    private Map<String, Teacher> teachers;

}

public class Friend {
    private String name;
    private int age;
}
public class Teacher {
    private String name;
    private int age;
}
public class JsonDemo {
    public static void main(String[] args) throws IOException {
        // 定义一个集合用来存储兴趣信息
        List<String> interest = new ArrayList<String>();
        interest.add("读书");
        interest.add("跑步");
        interest.add("看电影");
        //定义一个集合用来存储朋友信息
        List<Friend> friends = new ArrayList<Friend>();
        friends.add(new Friend("小王",22));
        friends.add(new Friend("大王",22));
        friends.add(new Friend("小鬼",22));
        //定义一个map用来存储老师信息
        Map<String,Teacher> teachers = new HashMap<String,Teacher>();
        teachers.put("语文老师", new Teacher("嘻嘻",44));
        teachers.put("数学老师", new Teacher("哈哈",44));
        
        Student stu1 = new Student();
        stu1.setId(1);
        stu1.setName("张三");
        stu1.setAge(22);
        stu1.setInterest(interest);
        stu1.setFriends(friends);
        stu1.setTeachers(teachers);

        Student stu2 = new Student();
        stu2.setId(2);
        stu2.setName("李四");
        stu2.setAge(22);
        stu2.setInterest(interest);
        stu2.setFriends(friends);
        stu2.setTeachers(teachers);
        
        //利用ObjectMapper将javaBean转换成json字符串
        ObjectMapper om = new ObjectMapper();
        String stustr1 = om.writeValueAsString(stu1);
        String stustr2 = om.writeValueAsString(stu2);
        System.out.println(stustr1);
        System.out.println(stustr2);
        
        //利用JsonGenerator将javaBean转换成json字符串、
        JsonGenerator jg = null;
        jg = om.getJsonFactory().createJsonGenerator(System.out,JsonEncoding.UTF8);
        jg.writeObject(stu1);
        //测试的时候中文乱码,解决方式未知
        System.out.println();

        // 使用JSONArray将java对象转换为json
        JSONArray json1 = new JSONArray();
        // JSONArray是一个集合,通过这种方式添加的子对象都是JSONObject类型
        json1.add(stu1);
        json1.add(stu2);
        System.out.println("JSONArray:" + json1);

        // 使用JSONObject将java对象转换为json
        JSONObject obj = new JSONObject();
        obj = obj.fromObject(stu1);
        System.out.println("JSONObject:" + obj);
        // 调用JSONObject的get方法可以得到对应字段的值
        int id = obj.getInt("id");
        System.out.println("id:" + id);

        // 演示由JSONArray得到JSONObject对象
        obj = json1.getJSONObject(0);
        System.out.println("JSONObject:" + obj);

        // 演示如何将JSONArray对象转换成javaBean对象
        List<Student> students = new ArrayList<Student>();
        students.add(stu1);
        students.add(stu2);
        JSONArray json2 = new JSONArray();
        // 通过这种方式添加的每一个子对象都是JSONObject对象
        json2 = json2.fromObject(students);
        System.out.println("json2:" + json2);
        System.out.println("数据个数:" + json2.size());

        //在操作json的数据格式的时候,如果没有指明数据类型,那么只能是基本类型或者是String类型,不能出现复杂数据类型。
        for (int i = 0; i < json2.size(); i++) {
            JSONObject jobj = json2.getJSONObject(i);
            //当javaBean中含有比较复杂的数据结构时,如List<JavaBean>,Map<String,JavaBean>
            Map<String,Class> map = new HashMap<String,Class>();
            //此处的friends必须保证和javaBean中的属性名相同
            map.put("friends", Friend.class);
            Student student = (Student) JSONObject.toBean(jobj, Student.class,map);
            System.out.println("student" + i + ":" + student);
            Friend friend =(Friend) student.getFriends().get(0);
            Map<String,Teacher> teac =  student.getTeachers();
            //注意这样写会报类型转换错误ClassCastException
//            Teacher ttt = (Teacher)teac.get("语文老师");
            //应该这样写,再转一次
            Teacher teacher = (Teacher)JSONObject.toBean(JSONObject.fromObject(teac.get("语文老师")),Teacher.class);
            System.out.println("语文老师的名字:"+teacher.getName());
        }
     
        

        JSONArray json3 = new JSONArray();
        //字符串转jsonArray得满足JSONArray格式
        String str = "[{id:1,name:'张三'}]";
        json3 = json3.fromObject(str);
        System.out.println("str:"+json3);
        //字符串转JSONobject,得满足JSONObject格式
        JSONObject obj2 = new JSONObject();
        String str2 = "{id:1,name:'张三'}";
        obj2 = obj2.fromObject(str2);
        System.out.println("str2:"+obj2);
        
        //集合List,用上面定义的interest集合测试
        json3 = json3.fromObject(interest);
        System.out.println("interest:"+json3);
        String value = (String)json3.get(0);
        System.out.println("value:"+value);
        
        //map
        Map<String,String> map1 = new HashMap<String,String>();
        map1.put("id", "1");
        map1.put("name","王小坏");
        map1.put("age", "22");
        json3=json3.fromObject(map1);
        System.out.println("map:"+json3);

    }
    
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值