java对象和json数据的互转

2022-09-24 09:35:13 浏览数 (1)

JSON快速入门

代码语言:javascript复制
1. 概念: JavaScript Object Notation       JavaScript对象表示法
    Person p = new Person();
    p.setName("张三");
    p.setAge(23);
    p.setGender("男");

    var p = {"name":"张三","age":23,"gender":"男"};

    * json现在多用于存储和交换文本信息的语法
    * 进行数据的传输
    * JSON 比 XML 更小、更快,更易解析。

2. 语法:
    1. 基本规则
        * 数据在名称/值对中:json数据是由键值对构成的
            * 键用引号(单双都行)引起来,也可以不使用引号
            * 值得取值类型:
                1. 数字(整数或浮点数)
                2. 字符串(在双引号中)
                3. 逻辑值(true 或 false)
                4. 数组(在方括号中)    {"persons":[{},{}]}
                5. 对象(在花括号中) {"address":{"province":"陕西"....}}
                6. null
        * 数据由逗号分隔:多个键值对由逗号分隔
        * 花括号保存对象:使用{}定义json 格式
        * 方括号保存数组:[]
    2. 获取数据:
        1. json对象.键名
        2. json对象["键名"]
        3. 数组对象[索引]
        4. 遍历
                 //1.定义基本格式
                var person = {"name": "张三", age: 23, 'gender': true};

                var ps = [{"name": "张三", "age": 23, "gender": true},
                    {"name": "李四", "age": 24, "gender": true},
                    {"name": "王五", "age": 25, "gender": false}];
                //获取person对象中所有的键和值
                //for in 循环
               /* for(var key in person){
                    //这样的方式获取不行。因为相当于  person."name"
                    //alert(key   ":"   person.key);
                    alert(key ":" person[key]);
                }*/

               //获取ps中的所有值
                for (var i = 0; i < ps.length; i  ) {
                    var p = ps[i];
                    for(var key in p){
                        alert(key ":" p[key]);
                    }
                }


3. JSON数据和Java对象的相互转换

    * JSON解析器:
        * 常见的解析器:Jsonlib,Gson,fastjson,jackson

    1. JSON转为Java对象
        1. 导入jackson的相关jar包
        2. 创建Jackson核心对象 ObjectMapper
        3. 调用ObjectMapper的相关方法进行转换
            1. readValue(json字符串数据,Class)
    2. Java对象转换JSON
        1. 使用步骤:
            1. 导入jackson的相关jar包
            2. 创建Jackson核心对象 ObjectMapper
            3. 调用ObjectMapper的相关方法进行转换
                1. 转换方法:
                    * writeValue(参数1,obj):
                        参数1:
                            File:将obj对象转换为JSON字符串,并保存到指定的文件中
                            Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                            OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
                    * writeValueAsString(obj):将对象转为json字符串

                2. 注解:
                    1. @JsonIgnore:排除属性。
                    2. @JsonFormat:属性值得格式化
                        * @JsonFormat(pattern = "yyyy-MM-dd")

                3. 复杂java对象转换
                    1. List:数组
                    2. Map:对象格式一致

json对象解析演示代码

1. 导入解析器jackson的相关jar包

jar包下载:点击下载 链接:https://pan.baidu.com/s/183lzYpdVyFhYmMUhVwF1oA 提取码:7glo

2. 创建一个javaBean封装对象

Person.java

代码语言:javascript复制
package domain;/*
 *Created by tao on 2020-03-21.
 */

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;

import java.util.Date;

public class Person {
    private String name;
    private String sex;
    private int age;

    //@JsonIgnore     //忽略属性
    @JsonFormat(pattern = "yyyy-mm-dd")
    private Date birthday;

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

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

3. 测试代码

JacksonTest.java

代码语言:javascript复制
package jsonTest;

import domain.Person;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;

import java.io.File;
import java.io.FileWriter;
import java.util.*;

public class JacksonTest {


    //Java对象转为JSON字符串
    @Test
    public void test1() throws Exception {
        //1.创建Person对象
        Person p  = new Person();
        p.setName("张三");
        p.setAge(23);
        p.setSex("男");

        //2.创建Jackson的核心对象  ObjectMapper
        ObjectMapper mapper = new ObjectMapper();
        //3.转换
        /*

            转换方法:
                writeValue(参数1,obj):
                    参数1:
                        File:将obj对象转换为JSON字符串,并保存到指定的文件中
                        Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中
                        OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中
                writeValueAsString(obj):将对象转为json字符串
         */
        String json = mapper.writeValueAsString(p);
        //{"name":"张三","age":23,"gender":"男"}
        System.out.println(p);
        System.out.println(json);//{"name":"张三","age":23,"gender":"男"}

        //writeValue,将数据写到d://a.txt文件中
        mapper.writeValue(new File("d://a.txt"),p);
        //writeValue.将数据关联到Writer中
        mapper.writeValue(new FileWriter("d://b.txt"),p);
    }

    /*格式化时间对象*/
    @Test
    public void test2() throws Exception {
        //1.创建Person对象
        Person p = new Person();
        p.setName("张三");
        p.setAge(23);
        p.setSex("男");
        p.setBirthday(new Date());
        //2.转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(p);

        System.out.println(json);//{"name":"张三","age":23,"gender":"男","birthday":1530958029263}
                                //{"name":"张三","sex":"男","age":23,"birthday":"2020-30-21"}
    }


    /*多个封装对象转json数组对象*/
    @Test
    public void test3() throws Exception {
        //1.创建Person对象
        Person p = new Person();
        p.setName("张三");
        p.setAge(23);
        p.setSex("男");
        p.setBirthday(new Date());

        Person p1 = new Person();
        p1.setName("张三");
        p1.setAge(23);
        p1.setSex("男");
        p1.setBirthday(new Date());

        Person p2 = new Person();
        p2.setName("张三");
        p2.setAge(23);
        p2.setSex("男");
        p2.setBirthday(new Date());
        //创建List集合
        List<Person> ps = new ArrayList<Person>();
        ps.add(p);
        ps.add(p1);
        ps.add(p2);
        //2.转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(ps);
        // [{},{},{}]
        //[{"name":"张三","sex":"男","age":23,"birthday":"2020-33-21"},{"name":"张三","sex":"男","age":23,"birthday":"2020-33-21"},{"name":"张三","sex":"男","age":23,"birthday":"2020-33-21"}]
        System.out.println(json);
    }

    /*map对象转json对象*/
    @Test
    public void test4() throws Exception {
        //1.创建map对象
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("name","张三");
        map.put("age",23);
        map.put("gender","男");


        //2.转换
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(map);
        //{"name":"张三","age":23,"gender":"男"}
        System.out.println(json);//{"gender":"男","name":"张三","age":23}
    }


    //演示 JSON字符串转为Java对象
    @Test
    public void test5() throws Exception {
       //1.初始化JSON字符串
        String json = "{"sex":"男","name":"张三","age":23}";

        //2.创建ObjectMapper对象
        ObjectMapper mapper = new ObjectMapper();
        //3.转换为Java对象 Person对象
        Person person = mapper.readValue(json, Person.class);

        System.out.println(person);//Person{name='张三', sex='男', age=23, birthday=null}
    }

}

测试结果

  1. Test1:(将Persion对象转换成了json对象)
  1. Test2

* 使用了对象属性格式化

* 使得将时间戳数据转换为json对象时格式化为想要的数据格式

3. Test3 * 将多个Person对象,转换为json数组对象 * 首先要new 一个List,将所有的Person对象加入列表,转换时把列表传给mapper 结果如下

4. Test4 将map数据转换为json 结果如下

5. Test5(将json对象转换为Person对象) * 初始化JSON字符串 String json = "{"sex":"男","name":"张三","age":23}"; * 转换为Java对象 Person对象 Person person = mapper.readValue(json, Person.class); 结果如下

0 人点赞