在Java中,对象、List、Map和JSON之间的相互转换是常见的需求,尤其是在与RESTful API交互或处理数据时。以下是如何在这些数据类型之间进行转换的示例:
- 对象到JSON
使用库如Jackson或Gson,可以轻松地将Java对象转换为JSON字符串。
使用Jackson:
java复制代码
import com.fasterxml.jackson.databind.ObjectMapper;
// ...
ObjectMapper mapper = new ObjectMapper();
MyObject myObject = new MyObject(/* ... */);
String jsonString = mapper.writeValueAsString(myObject);
使用Gson:
java复制代码
import com.google.gson.Gson;
// ...
Gson gson = new Gson();
MyObject myObject = new MyObject(/* ... */);
String jsonString = gson.toJson(myObject);
- JSON到对象
同样,使用Jackson或Gson,你可以将JSON字符串转换回Java对象。
使用Jackson:
java复制代码
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"field1\":\"value1\",\"field2\":123}";
MyObject myObject = mapper.readValue(jsonString, MyObject.class);
使用Gson:
java复制代码
Gson gson = new Gson();
String jsonString = "{\"field1\":\"value1\",\"field2\":123}";
MyObject myObject = gson.fromJson(jsonString, MyObject.class);
- List到JSON
对于List,你可以使用与对象相同的方法,但需要将类型参数设置为List的泛型类型。
使用Jackson:
java复制代码
List<MyObject> myObjectList = /* ... */;
String jsonString = mapper.writeValueAsString(myObjectList);
使用Gson:
java复制代码
String jsonString = gson.toJson(myObjectList);
- JSON到List
同样地,你可以将JSON字符串转换回List。
使用Jackson:
java复制代码
String jsonString = "[{\"field1\":\"value1\",\"field2\":123},{\"field1\":\"value2\",\"field2\":456}]";
List<MyObject> myObjectList = mapper.readValue(jsonString, new TypeReference<List<MyObject>>(){});
注意这里使用了TypeReference
来传递泛型类型信息,因为Java的类型擦除在运行时丢失了类型信息。
使用Gson:
java复制代码
Type listType = new TypeToken<List<MyObject>>(){}.getType();
List<MyObject> myObjectList = gson.fromJson(jsonString, listType);
- Map到JSON 和 JSON到Map
Map的转换与对象和List的转换类似。你可以直接使用String作为键,并将值转换为适当的类型。
使用Jackson:
java复制代码
Map<String, Object> map = /* ... */;
String jsonString = mapper.writeValueAsString(map);
// ...
Map<String, Object> newMap = mapper.readValue(jsonString, new TypeReference<Map<String, Object>>(){});
使用Gson:
java复制代码
String jsonString = gson.toJson(map);
// ...
Type mapType = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> newMap = gson.fromJson(jsonString, mapType);