
需要用到谷歌的一个jar包
gson.jar
测试的类
public class Person {
private String name;
private int age;
private String sex;
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Person() {
}
@Override
public String toString() {
return "Person{" +
"name='" + name + ''' +
", age=" + age +
", sex='" + sex + ''' +
'}';
}
}
//只需要写明继承的泛型,就可以作为参数传入了 public class PersonType extends TypeToken> { }
java--json与JavaBean,List,Map的使用
public class Test {
public static void main(String[] args) {
//javaBean与json字符串之间的转化
Person person=new Person("小白",19,"男");
Gson gson = new Gson();//创建谷歌的工具类
//toJson();将对象转化为json字符串
String s = gson.toJson(person);
System.out.println(s);//{"name":"小白","age":19,"sex":"男"}
//fromJson()将json字符串转化为传入的类对象
person= gson.fromJson(s,Person.class);
System.out.println(person.toString());//Person{name='小白', age=19, sex='男'}
//List 与json之间的转化
ArrayList people = new ArrayList<>();
people.add(new Person("白小纯",20,"男"));
people.add(new Person("孟浩",22,"男"));
people.add(new Person("李清照",20,"女"));
String s1 = gson.toJson(people);
System.out.println(s1);//[{"name":"白小纯","age":20,"sex":"男"},{"name":"孟浩","age":22,"sex":"男"},{"name":"李清照","age":20,"sex":"女"}]
//但是这样做的话就有缺陷
//转化回集合类型
ArrayList arrayList = gson.fromJson(s1, ArrayList.class);
//发现原来传入集合的泛型失效了,全部的都变成gson包中的linkedTreeMap类型了
for (Object o : arrayList) {
System.out.println(o);
System.out.println(o.getClass());//class com.google.gson.internal.linkedTreeMap
}
//所以我们需要换一种方式来使用
Object o = gson.fromJson(s1, new PersonType().getType());
System.out.println(o.getClass());//class java.util.ArrayList
ArrayList list=(ArrayList)o;
//再看元素类型
System.out.println(list.get(0).getClass());//class projectTest.Person
//Map类型与json字符串的转换
HashMap personHashMap=new HashMap<>();
personHashMap.put("p1",new Person("白小纯",20,"男"));
personHashMap.put("p2",new Person("孟浩",22,"男"));
String s2 = gson.toJson(personHashMap);
System.out.println(s2);//{"p1":{"name":"白小纯","age":20,"sex":"男"},"p2":{"name":"孟浩","age":22,"sex":"男"}}
//json'字符串转化为原来的对象
HashMap map= gson.fromJson(s2,new TypeToken>(){}.getType());//直接使用匿名子类
for (Map.Entry stringPersonEntry : map.entrySet()) {
System.out.println(stringPersonEntry);
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)