Java - conversión json y javaBean

1. Conversión entre objetos comunes de Java y cadenas json

objeto java ----> json

Primero crea un objeto java:

1

2

3

4 4

5 5

6 6

7 7

8

9 9

10

11

12

13

14

15

dieciséis

17

18 años

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 + "]";

    }

}

  Ahora el objeto java se convierte en forma json:

1

2

3

4 4

5 5

6 6

7 7

8

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

        }

  Se define una clase de entidad de Estudiante, y luego se convierte en una cadena JSON usando JSONObject y JSONArray respectivamente. Veamos el resultado impreso:

json -> javabean

Lo anterior explica cómo convertir un objeto java en una cadena JSON. Veamos cómo convertir un formato de cadena JSON en un objeto java.

Primero, debe definir dos cadenas en diferentes formatos. Debe usar \ para escapar de las comillas dobles.

1

2

3

4 4

5 5

6 6

7 7

8

9 9

10

11

12

13

14

15

dieciséis

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

    }

  Resultado de la operación:

Como se puede ver en el código anterior, usar JSONObject puede convertir fácilmente una cadena de formato JSON en un objeto java, pero usar JSONArray no es tan fácil, ya que tiene el símbolo "[]", por lo que hemos obtenido JSONArray aquí Después del objeto, tome el primer elemento que es la deformación de un estudiante que necesitamos, y luego use JSONObject para obtenerlo fácilmente.

Segundo, la conversión entre list y json string

Lo siguiente convertirá la lista en una cadena json:

1

2

3

4 4

5 5

6 6

7 7

8

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

    }

  El resultado de ejecución es: strArray: [{"address": "Beijing Xicheng District", "name": "JSON", "age": "23"}, {"address": "Beijing Xicheng District", "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类型对应值的类型。

运行结果:

发布了7 篇原创文章 · 获赞 69 · 访问量 20万+

Supongo que te gusta

Origin blog.csdn.net/u014320421/article/details/84315000
Recomendado
Clasificación