首页 > 开发 > Java > 正文

Java中json与javaBean几种互转的讲解

2019-10-21 18:41:06
字体:
来源:转载
供稿:网友

一、java普通对象和json字符串的互转

java对象---->json

首先创建一个java对象:

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形式:

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字符串,下面看打印的结果:

Java,json,javaBean,互转

json-->javabean

上面说明了如何把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);}

运行结果:

Java,json,javaBean,互转

从上面的代码中可以看出,使用JSONObject可以轻松的把JSON格式的字符串转化为java对象,但是使用JSONArray就没那么容易了,因为它有“[]”符号,所以我们这里在获得了JSONArray的对象之后,取其第一个元素即我们需要的一个student的变形,然后使用JSONObject轻松获得。

二、list和json字符串的互转

下面将list转化为json字符串:

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

运行结果为:

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

如果使用JSONObject进行转换会出现:

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

下面将json串转换为list

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

运行结果为:

Java,json,javaBean,互转

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

运行结果:

Java,json,javaBean,互转

json字符串转化为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());}

注意在转化为map的时候需要创建一个类,类里面需要有first属性跟json串里面的一样:

使用toBean()方法是传入了三个参数,第一个是JSONObject对象,第二个是MyBean.class,第三个是一个Map对象。通过MyBean可以知道此类中要有一个first的属性,且其类型为Student,要和map中的键和值类型对应,即,first对应键 first类型对应值的类型。

运行结果:

Java,json,javaBean,互转

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对CuoXin错新网的支持。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表