当前位置: 移动技术网 > IT编程>开发语言>Java > 使用GSON库将Java中的map键值对应结构对象转换为JSON

使用GSON库将Java中的map键值对应结构对象转换为JSON

2019年07月22日  | 移动技术网IT编程  | 我要评论

发布租房信息,建湖天气,创维37l05hr

map的存储结构式key/value形式,key 和 value可以是普通类型,也可以是自己写的javabean(本文),还可以是带有泛型的list.

(gson的github项目页:https://github.com/google/gson)

javabean

本例中您要重点看如何将json转回为普通javabean对象时typetoken的定义.

实体类:

public class point { 
  private int x; 
  private int y; 
 
  public point(int x, int y) { 
    this.x = x; 
    this.y = y; 
  } 
 
  public int getx() { 
    return x; 
  } 
 
  public void setx(int x) { 
    this.x = x; 
  } 
 
  public int gety() { 
    return y; 
  } 
 
  public void sety(int y) { 
    this.y = y; 
  } 
 
  @override 
  public string tostring() { 
    return "point [x=" + x + ", y=" + y + "]"; 
  } 
 
} 

测试类:

import java.util.linkedhashmap; 
import java.util.map; 
 
import com.google.gson.gson; 
import com.google.gson.gsonbuilder; 
import com.google.gson.reflect.typetoken; 
 
public class gsontest3 { 
 
  public static void main(string[] args) { 
    gson gson = new gsonbuilder().enablecomplexmapkeyserialization() 
        .create(); 
 
    map<point, string> map1 = new linkedhashmap<point, string>();// 使用linkedhashmap将结果按先进先出顺序排列 
    map1.put(new point(5, 6), "a"); 
    map1.put(new point(8, 8), "b"); 
    string s = gson.tojson(map1); 
    system.out.println(s);// 结果:[[{"x":5,"y":6},"a"],[{"x":8,"y":8},"b"]] 
 
    map<point, string> retmap = gson.fromjson(s, 
        new typetoken<map<point, string>>() { 
        }.gettype()); 
    for (point p : retmap.keyset()) { 
      system.out.println("key:" + p + " values:" + retmap.get(p)); 
    } 
    system.out.println(retmap); 
 
    system.out.println("----------------------------------"); 
    map<string, point> map2 = new linkedhashmap<string, point>(); 
    map2.put("a", new point(3, 4)); 
    map2.put("b", new point(5, 6)); 
    string s2 = gson.tojson(map2); 
    system.out.println(s2); 
 
    map<string, point> retmap2 = gson.fromjson(s2, 
        new typetoken<map<string, point>>() { 
        }.gettype()); 
    for (string key : retmap2.keyset()) { 
      system.out.println("key:" + key + " values:" + retmap2.get(key)); 
    } 
 
  } 
} 

结果:

[[{"x":5,"y":6},"a"],[{"x":8,"y":8},"b"]] 
key:point [x=5, y=6] values:a 
key:point [x=8, y=8] values:b 
{point [x=5, y=6]=a, point [x=8, y=8]=b} 
---------------------------------- 
{"a":{"x":3,"y":4},"b":{"x":5,"y":6}} 
key:a values:point [x=3, y=4] 
key:b values:point [x=5, y=6] 

泛型list

实体类:

import java.util.date; 
 
public class student { 
  private int id; 
  private string name; 
  private date birthday; 
 
  public int getid() { 
    return id; 
  } 
 
  public void setid(int id) { 
    this.id = id; 
  } 
 
  public string getname() { 
    return name; 
  } 
 
  public void setname(string name) { 
    this.name = name; 
  } 
 
  public date getbirthday() { 
    return birthday; 
  } 
 
  public void setbirthday(date birthday) { 
    this.birthday = birthday; 
  } 
 
  @override 
  public string tostring() { 
    return "student [birthday=" + birthday + ", id=" + id + ", name=" 
        + name + "]"; 
  } 
 
} 


public class teacher { 
  private int id; 
 
  private string name; 
 
  private string title; 
 
  public int getid() { 
    return id; 
  } 
 
  public void setid(int id) { 
    this.id = id; 
  } 
 
  public string getname() { 
    return name; 
  } 
 
  public void setname(string name) { 
    this.name = name; 
  } 
 
  public string gettitle() { 
    return title; 
  } 
 
  public void settitle(string title) { 
    this.title = title; 
  } 
 
  @override 
  public string tostring() { 
    return "teacher [id=" + id + ", name=" + name + ", title=" + title 
        + "]"; 
  } 
 
} 

测试类:

package com.tgb.lk.demo.gson.test4; 
 
import java.util.arraylist; 
import java.util.date; 
import java.util.linkedhashmap; 
import java.util.list; 
import java.util.map; 
 
import com.google.gson.gson; 
import com.google.gson.reflect.typetoken; 
 
public class gsontest4 { 
  public static void main(string[] args) { 
    student student1 = new student(); 
    student1.setid(1); 
    student1.setname("李坤"); 
    student1.setbirthday(new date()); 
 
    student student2 = new student(); 
    student2.setid(2); 
    student2.setname("曹贵生"); 
    student2.setbirthday(new date()); 
 
    student student3 = new student(); 
    student3.setid(3); 
    student3.setname("柳波"); 
    student3.setbirthday(new date()); 
 
    list<student> stulist = new arraylist<student>(); 
    stulist.add(student1); 
    stulist.add(student2); 
    stulist.add(student3); 
 
    teacher teacher1 = new teacher(); 
    teacher1.setid(1); 
    teacher1.setname("米老师"); 
    teacher1.settitle("教授"); 
 
    teacher teacher2 = new teacher(); 
    teacher2.setid(2); 
    teacher2.setname("丁老师"); 
    teacher2.settitle("讲师"); 
    list<teacher> teacherlist = new arraylist<teacher>(); 
    teacherlist.add(teacher1); 
    teacherlist.add(teacher2); 
 
    map<string, object> map = new linkedhashmap<string, object>(); 
    map.put("students", stulist); 
    map.put("teachers", teacherlist); 
 
    gson gson = new gson(); 
    string s = gson.tojson(map); 
    system.out.println(s); 
 
    system.out.println("----------------------------------"); 
 
    map<string, object> retmap = gson.fromjson(s, 
        new typetoken<map<string, list<object>>>() { 
        }.gettype()); 
 
    for (string key : retmap.keyset()) { 
      system.out.println("key:" + key + " values:" + retmap.get(key)); 
      if (key.equals("students")) { 
        list<student> stulist = (list<student>) retmap.get(key); 
        system.out.println(stulist); 
      } else if (key.equals("teachers")) { 
        list<teacher> tchrlist = (list<teacher>) retmap.get(key); 
        system.out.println(tchrlist); 
      } 
    } 
 
  } 
} 

输出结果:

{"students":[{"id":1,"name":"李坤","birthday":"jun 22, 2012 9:48:19 pm"},{"id":2,"name":"曹贵生","birthday":"jun 22, 2012 9:48:19 pm"},{"id":3,"name":"柳波","birthday":"jun 22, 2012 9:48:19 pm"}],"teachers":[{"id":1,"name":"米老师","title":"教授"},{"id":2,"name":"丁老师","title":"讲师"}]} 
---------------------------------- 
key:students values:[{id=1.0, name=李坤, birthday=jun 22, 2012 9:48:19 pm}, {id=2.0, name=曹贵生, birthday=jun 22, 2012 9:48:19 pm}, {id=3.0, name=柳波, birthday=jun 22, 2012 9:48:19 pm}] 
[{id=1.0, name=李坤, birthday=jun 22, 2012 9:48:19 pm}, {id=2.0, name=曹贵生, birthday=jun 22, 2012 9:48:19 pm}, {id=3.0, name=柳波, birthday=jun 22, 2012 9:48:19 pm}] 
key:teachers values:[{id=1.0, name=米老师, title=教授}, {id=2.0, name=丁老师, title=讲师}] 
[{id=1.0, name=米老师, title=教授}, {id=2.0, name=丁老师, title=讲师}] 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网