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

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=讲师}] 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, json
, map
gson
gson如何获取json键值、gson map to json、gson解析json map、gson json转map、gson将map转换成json,以便于您获取更多的相关知识。

时间: 2024-10-03 15:45:30

使用GSON库将Java中的map键值对应结构对象转换为JSON_java的相关文章

JAVA中关于Map的九大问题

通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的.下面就以K和V来代表键和值,来说明一下java中关于Map的九大问题. 0.将Map转换为List类型 在java中Map接口提供了三种集合获取方式:Key set,,value set, and key-value set..它们都可以通过构造方法或者addAll()方法来转换为List类型.下面代码就说明了如何从Map中构造ArrayList: // key list List keyList = new ArrayLi

java中关于Map的几大问题总结

通常来说, Map 是一个由键值对组成的数据结构,且在集合中每个键是唯一的.下面就以 K 和 V 来代表键和值,来说明一下 java 中关于 Map 的九大问题. 0 .将 Map 转换为 List 类型 在 java 中 Map 接口提供了三种集合获取方式: Key set, , value set , and key-value set. .它们都可以通过构造方法或者 addAll() 方法来转换为 List 类型.下面代码就说明了如何从 Map 中构造 ArrayList : // key

java 在方法中修改MAP的值结果原MAP的值也发生了变化

问题描述 java 在方法中修改MAP的值结果原MAP的值也发生了变化 public class Switch4 { //获取指定品种的主力合约和交易合约 private void getCorrectContract(Map contractMap) { Map correctContractMap = contractMap; //原主力交易合约用来判断是否换月 correctContractMap.put("main_contract","15451"); /

jsp中el Map取值问题标题标题标题

问题描述 jsp中el Map取值问题标题标题标题 现在要做个树状菜单来展现单位与个人账号,1对多,现在我的做法是将单位账号展现后, 里面 根据单位账号的ID取后台map,即个人账号为${map['id']},请问如何将这里面的id 改成动态的 即${map['单位账号.id']}呢?或者大仙们告诉一个别人方法 ! 解决方案 就是MAP的应用问题了,你想做点开一个单位名称,就显示该单位所有人的账号对吧?首先要初始化好MAP,把每个单位的个人账号分别放在数组中,比如a[0]=;a[1]=;然后把单

java中double类型的值如何实现科学计数法

问题描述 java中double类型的值如何实现科学计数法 java中,一个double类型的数值,如何在显示的时候是科学计数法 解决方案 它达到一定的值,就会显示成科学计数格式,当然你可以自己这个格式化方法任意转 解决方案二: 小数位数多了自动科学计数法表示的吧.

java中如何理解switch语句参数的对象.what

问题描述 java中如何理解switch语句参数的对象.what java中如何理解switch语句参数的对象.what switch (msg.what) { ......} 解决方案 msg是一个对象,what是其中的一个成员变量,没有什么特别的.

java中new关键词问题,涉及匿名对象。

问题描述 java中new关键词问题,涉及匿名对象. new 方法1.方法2=(new 方法1).方法2=对象1.方法2=对象2,这个对象2是匿名对象,这么理解对吗 解决方案 new 方法1.方法2 这是不合法的 要么是 new 对象().方法,要么写 new 类.对象() 解决方案二: java中没有什么匿名的对象,必须有变量保持着对变量的引用,否则这个对象就会被垃圾回收了. 解决方案三: 说的再详细一些,用到括号的必然是方法调用(包括构造函数,其实也是一个特殊的方法) 用到点的地方,就是调用

图片-java中的boolean返回值问题

问题描述 java中的boolean返回值问题 解决方案 怎么修改才能出正确的结果 解决方案二: 第八行和第十六行你是要调用函数吧. boolean isOverSpeed = mysar.isOverSpeed;改成 boolean isOverSpeed = mysar.isOverSpeed(); 解决方案三: 关于java中返回值的问题voidExecuteNonQuery()返回值的问题Java中keySet()返回值的排序问题

context:property-placeholder 不能解析xml中配置的键值

问题描述 context:property-placeholder 不能解析xml中配置的键值 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in XML document from URL [file:/E:/PT/Installtomcat/webapps/SSHTest1/WEB-INF/classes/applicationContext.xml] is invalid; nes