Java中Json与List、Map、entity怎么互相转化

第一步:导入依赖 <
dependency>

<
groupId>
com.google.code.gson<
/groupId>

<
artifactId>
gson<
/artifactId>

<
version>
2.8.6<
/version>

<
/dependency>
第二步:开始使用场景一:转换普通对象(Bean)。

1.将普通的JavaBean转换为Json字符串是最常用的操作了,首先创建一个简单的类,例如:Person。

public class Person
{
private String name;

private int age;

private boolean isMale;

private List<
String>
hobbies;


// 省略构造器和getter/setter方法,注意重写toString方法,便于查看控制台输出。

@Override
public String toString()
{
final StringBuilder sb = new StringBuilder("
Person{"
);

sb.append("
name='
"
).append(name).append('
\'
'
);

sb.append("
, age="
).append(age);

sb.append("
, isMale="
).append(isMale);

sb.append("
, hobbies="
).append(hobbies);

sb.append('
}'
);

return sb.toString();

}
}

2.使用Gson解析Person的实例。

1 先创建Person对象。 2 在创建Gson对象。 3 调用Gson的String toJson(Object)方法,来将对象转换为json字符串。

@Test
public void testBeanToJson()
{
// 创建Bean
Person p = new Person("
艾伦·耶格尔"
, 16, true, Arrays.asList("
自由"
, "
迫害莱纳"
));

// 创建Gson对象
Gson gson = new Gson();

// 调用Gson的String toJson(Object)方法将Bean转换为json字符串
String pJson = gson.toJson(p);


System.out.println(pJson);

// {"
name"
:"
艾伦·耶格尔"
,"
age"
:16,"
isMale"
:true,"
hobbies"
:["
自由"
,"
迫害莱纳"
]}
}

JavaJson与List、Map、entity互转详解,让你的代码更加灵活高效!

3.将Person实例的json字符串转换为Person对象。

调用Gson的 t fromJson(String, Class)方法,将Json串转换为对象

// 调用Gson的 <
T>
t fromJson(String, Class)方法,将Json串转换为对象
Person person = gson.fromJson(pJson, Person.class);

System.out.println(person);

// Person{name='
艾伦·耶格尔'
, age=16, isMale=true, hobbies=[自由, 迫害莱纳]} 使用场景二:转换List集合。@Test
public void testListToJson()
{
// 先准备一个List集合
List<
Person>
list = new ArrayList<
Person>
();

list.add(new Person("
三笠·阿克曼"
, 16, false, Arrays.asList("
砍巨人"
, "
保护艾伦"
)));

list.add(new Person("
阿明·阿诺德"
, 16, true, Arrays.asList("
看书"
, "
玩海螺"
)));

System.out.println(list);

// 创建Gson实例
Gson gson = new Gson();

// 调用Gson的toJson方法
String listJson = gson.toJson(list);

System.out.println(listJson);

// [{"
name"
:"
三笠·阿克曼"
,"
age"
:16,"
isMale"
:false,"
hobbies"
:["
砍巨人"
,"
保护艾伦"
]},{"
name"
:"
阿明·阿诺德"
,"
age"
:16,"
isMale"
:true,"
hobbies"
:["
看书"
,"
玩海螺"
]}]
} Json转List对象

由于List接口带泛型,如果还调用 t fromJson(String, Class)方法,那么返回的虽然还是个List集合,但是集合里面的数据却不是Person对象,而是Map对象,并将Person属性以键值对的形式存放在Map的实例中。让我们来验证一下。

......// 此处延续以上代码
List fromJson = gson.fromJson(listJson, List.class);

System.out.println(fromJson.get(0).getClass());

// class com.google.gson.internal.LinkedTreeMap

要想获取的List还和之前的一毛一样,那么我们需要调用Gson的 T fromJson(String, Type) 方法。如下:

可以使用Gson包提供的TypeToken类获取Type类型,然后将其作为此方法的参数。这个类带有泛型,且这个泛型就是Json串转换成为对象后的类型(此处是List)我们不需要重写这个类中的任何方法,只需要创建这个类的一个匿名内部类并调用getTpye()方法即可。

注意:一定要将这个匿名内部类的泛型写为Json字符串解析后生成的对象类型。

......// 此处延续以上代码
// 调用Gson的 T fromJson(String, Type)将List集合的json串反序列化为List对象
List<
Person>
plist = gson.fromJson(listJson, new TypeToken<
List<
Person>
>
(){}.getType());

System.out.println(plist);

// [Person{name='
三笠·阿克曼'
, age=16, isMale=false, hobbies=[砍巨人, 保护艾伦]}, Person{name='
阿明·阿诺德'
, age=16, isMale=true, hobbies=[看书, 玩海螺]}] 使用场景三:转换Map集合。

转换Map的步骤就和转换List的步骤一模一样了,代码如下。详解请看List转换。

@Test
public void testMapToJson()
{
Map<
String, Person>
map = new HashMap<
>
();

map.put("
p1"
, new Person("
利威尔·阿克曼"
, 35, true, Arrays.asList("
砍猴儿"
, "
打扫卫生"
)));

map.put("
p2"
, new Person("
韩吉·佐耶"
, 33, false, Arrays.asList("
研究巨人"
, "
讲故事"
)));


Gson gson = new Gson();

String mapJson = gson.toJson(map);


System.out.println(mapJson);

// {"
p1"
:{"
name"
:"
利威尔·阿克曼"
,"
age"
:35,"
isMale"
:true,"
hobbies"
:["
砍猴儿"
,"
打扫卫生"
]},"
p2"
:{"
name"
:"
韩吉·佐耶"
,"
age"
:33,"
isMale"
:false,"
hobbies"
:["
研究巨人"
,"
讲故事"
]}}
Map<
String, Person>
jsonMap = gson.fromJson(mapJson, new TypeToken<
Map<
String, Person>
>
() { }.getType());

System.out.println(jsonMap);

}

总的来说就是toJson()和fromJson两个方法



一、Json与List的互相转化。
Json和List都是Java开发中常用的数据结构之一。Json可以被称为“轻量级数据交换格式”,使用Json可以轻松存储和传输数据。而List是Java中最基本的线性结构,它可以用来保存一系列有序的数据。那么,如何让这两个数据结构实现互相转化呢?
二、Json与Map的互相转化。
Json和Map也是我们常用的数据结构之一。Json的结构形式与Map的键值对结构非常相似,也可以使用key-value的形式进行数据存储。所以Json与Map之间的转换也比较简单,只需要使用Java中的Map接口的相关方法即可。
三、Json与entity的互相转化。
Json与entity相互转换也是常用的操作。在Java开发中,我们通常使用entity类来封装Java对象,并将各种字段和属性作为类的成员变量。有时,我们需要将entity对象转换为Json格式的字符串,或者将Json字符串转换为entity对象。那么实现这个转换过程的方法是什么呢?
四、List与Map的互相转化。
List和Map之间的互相转化也是常见的操作。List是一种有序的线性结构,而Map则是一种无序的键值对结构。它们的不同之处在于,Map使用键值对的形式存储数据,而List只是简单地存储一系列有序的数据。那么,在Java开发中,如何将这两种不同的数据结构进行互相转化呢?
五、List与entity的互相转化。
List与entity的互相转化也是常见的操作之一。在Java开发中,我们通常使用List来存储一系列相同类型的数据对象,而使用entity来封装这些数据对象。有时,我们需要将List中的数据转换为Json格式的字符串,或者将Json字符串转换为List中的数据对象。那么,如何实现这个转换过程呢?
六、Map与entity的互相转化。
Map与entity之间的互换也是一个比较常见的操作。在Java开发中,我们通常使用Map来表示键值对的数据结构,而使用entity来封装复杂的数据对象。当我们需要将一个Map转换为一个entity对象时,或者将一个entity对象转换为Map形式的数据结构时,应该如何操作呢?
七、总结。
在Java开发中,数据的转换操作非常常见。Json、List、Map、entity等数据结构之间的转换可以帮助我们更好地完成各种业务需求。在实际应用中,我们应该根据具体的业务需求,选择相应的数据结构,实现灵活高效的数据处理。