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类型对应值的类型。
运行结果: