当前位置:首页>开发>正文

如何用gson将对象转换为json Gson对象转json时,属性值不存在时转成的null问题

2023-05-27 02:36:35 互联网 未知 开发

 如何用gson将对象转换为json Gson对象转json时,属性值不存在时转成的null问题

如何用gson将对象转换为json

使用Google的Gson实现对象和json字符串之间的转换

需要gson-1.4.jar

1.JsonUtil.java

Java代码
package com.snail.json

import java.lang.reflect.Type
import com.google.gson.Gson
/**
* Java对象和JSON字符串相互转化工具类
* @author penghuaiyi
* @date 2013-08-10
*/
public final class JsonUtil {

private JsonUtil(){}

/**
* 对象转换成json字符串
* @param obj
* @return
*/
public static String toJson(Object obj) {
Gson gson = new Gson()
return gson.toJson(obj)
}

/**
* json字符串转成对象
* @param str
* @param type
* @return
*/
public static T fromJson(String str, Type type) {
Gson gson = new Gson()
return gson.fromJson(str, type)
}

/**
* json字符串转成对象
* @param str
* @param type
* @return
*/
public static T fromJson(String str, Class type) {
Gson gson = new Gson()
return gson.fromJson(str, type)
}

}

2. Person.java

Java代码
package com.snail.json

public class Person {
private int id
private String name

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
}

}

3. Test.java

Java代码
package com.snail.json

import java.util.ArrayList
import java.util.HashMap
import java.util.List
import java.util.Map
import java.util.Map.Entry

import com.google.gson.reflect.TypeToken

public class Test {

/**
* 一般对象的转换
*/
public static void objectToJson(){
Person person = new Person()
person.setId(1)
person.setName("one")
//javabean转换成json字符串
String jsonStr = JsonUtil.toJson(person)
System.out.println(jsonStr)

//json字符串转换成javabean
Person newPerson = JsonUtil.fromJson(jsonStr, Person.class)
System.out.println(person == newPerson)
System.out.println(newPerson.getId() "," newPerson.getName())
}

/**
* 复合结构数据转换(List)
*/
public static void listToJson(){
Person person1 = new Person()
person1.setId(1)
person1.setName("one")

Person person2 = new Person()
person2.setId(2)
person2.setName("two")

List list = new ArrayList()
list.add(person1)
list.add(person2)

//javabean转换成json字符串
String jsonStr = JsonUtil.toJson(list)
System.out.println(jsonStr)

//json字符串转换成javabean对象
List rtn = JsonUtil.fromJson(jsonStr, new TypeToken>(){}.getType())
for(Person person : rtn){
System.out.println(person.getId() "," person.getName())
}
}

/**
* 复合结构数据转换(Map)
*/
public static void mapToJson(){
Person person1 = new Person()
person1.setId(1)
person1.setName("one")
Person person2 = new Person()
person2.setId(2)
person2.setName("two")

Map map = new HashMap()
map.put(person1.getId(), person1)
map.put(person2.getId(), person2)

//javabean转换成json字符串
String jsonStr = JsonUtil.toJson(map)
System.out.println(jsonStr)

//json字符串转换成Map对象
Map rtn = JsonUtil.fromJson(jsonStr, new TypeToken>(){}.getType())
for(Entry entry : rtn.entrySet()){
Integer key = entry.getKey()
Person newPerson = entry.getValue()
System.out.println("key:" key "," newPerson.getId() "," newPerson.getName())
}
}

public static void main(String[] args) {
objectToJson()
System.out.println("****************************")
listToJson()
System.out.println("****************************")
mapToJson()
}

}

Gson对象转json时,属性值不存在时转成的null问题??

为什么要用引号引起来,引起来的话就是String类型了,当将json格式转换成对象的时候,发现null是用引号引起来的话就会给对象name赋值为“null”字符串了,这样数据就不对头了。当object转换为json的时候"name":null是可以辨别的,读出来还是空值,不会影响什么,为什么非这样做捏?

gson 如何将带有泛型属性的对象解析为json字符串?

泛型不是问题,该怎么用就怎么用。只要自定义对象之间不要有嵌套引用,不然在转json的时候,会陷入死循环而出错
Gson gson =new Gson()
User user = ....
gson.toJson(user)

最新文章