gson.fromJson方法得到的对象,通过get方法报null
时间: 2024-06-05 11:10:48 浏览: 9
如果你使用gson.fromJson方法得到了一个对象,但是当你通过get方法获取值时返回了null,那么可能是以下原因:
1. 对象中的属性值为空或为null:如果对象中的属性值为空或为null,那么通过get方法获取该属性的值也会返回null。你可以检查一下对象中的属性值是否正确。
2. 对象中的属性名与get方法不匹配:如果对象中的属性名与get方法不匹配,那么通过get方法获取该属性的值也会返回null。你可以检查一下对象中的属性名是否正确,并且get方法的命名是否符合JavaBean规范。
3. 对象中的属性没有提供get方法:如果对象中的属性没有提供get方法,那么通过get方法获取该属性的值也会返回null。你可以检查一下对象中是否有提供get方法的属性。
4. 对象没有正确反序列化:如果对象没有正确反序列化,那么通过get方法获取该属性的值也会返回null。你可以检查一下反序列化的代码是否正确,以及被反序列化的JSON字符串是否符合对象的定义。
如果以上方法都无法解决问题,你可以在代码中打印一些日志来帮助你找到问题所在。
相关问题
Gson 将字符串json格式 解析为json对象, 并且根据key获取value的案例
假设有以下json字符串:
```
{
"name": "张三",
"age": 20,
"gender": "男",
"hobbies": ["篮球", "游泳", "旅游"],
"address": {
"province": "广东",
"city": "深圳",
"district": "南山区"
}
}
```
可以使用Gson库将其解析为对应的Json对象,并根据key获取value。
首先需要添加Gson库的依赖:
```
dependencies {
implementation 'com.google.code.gson:gson:2.8.5'
}
```
然后可以编写以下代码:
```java
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public class GsonTest {
public static void main(String[] args) {
String jsonStr = "{\"name\":\"张三\",\"age\":20,\"gender\":\"男\",\"hobbies\":[\"篮球\",\"游泳\",\"旅游\"],\"address\":{\"province\":\"广东\",\"city\":\"深圳\",\"district\":\"南山区\"}}";
Gson gson = new Gson();
JsonElement jsonElement = gson.fromJson(jsonStr, JsonElement.class);
if (jsonElement != null && jsonElement.isJsonObject()) {
JsonObject jsonObject = jsonElement.getAsJsonObject();
String name = jsonObject.get("name").getAsString();
int age = jsonObject.get("age").getAsInt();
String gender = jsonObject.get("gender").getAsString();
System.out.println("姓名:" + name);
System.out.println("年龄:" + age);
System.out.println("性别:" + gender);
JsonElement hobbiesElement = jsonObject.get("hobbies");
if (hobbiesElement != null && hobbiesElement.isJsonArray()) {
System.out.print("爱好:");
for (JsonElement hobby : hobbiesElement.getAsJsonArray()) {
System.out.print(hobby.getAsString() + " ");
}
System.out.println();
}
JsonObject addressObject = jsonObject.getAsJsonObject("address");
if (addressObject != null) {
String province = addressObject.get("province").getAsString();
String city = addressObject.get("city").getAsString();
String district = addressObject.get("district").getAsString();
System.out.println("省份:" + province);
System.out.println("城市:" + city);
System.out.println("区县:" + district);
}
}
}
}
```
输出结果为:
```
姓名:张三
年龄:20
性别:男
爱好:篮球 游泳 旅游
省份:广东
城市:深圳
区县:南山区
```
可以看到,通过Gson库解析后可以方便地获取Json对象中的数据。
使用Gson实现 ResultSet与json相互转化
可以通过以下步骤实现 ResultSet 与 JSON 相互转化:
1. 将 ResultSet 转化为 List<Map<String, Object>> 对象。
2. 使用 Gson 将 List<Map<String, Object>> 对象转化为 JSON 格式的字符串。
3. 使用 Gson 将 JSON 格式的字符串转化为 List<Map<String, Object>> 对象。
4. 将 List<Map<String, Object>> 对象转化为 ResultSet 对象。
以下是 Java 代码示例:
```java
import com.google.gson.Gson;
import java.sql.*;
import java.util.*;
public class ResultSetToJson {
public static void main(String[] args) throws SQLException {
// 获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false", "root", "password");
// 执行 SQL 查询语句
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
// 将 ResultSet 转化为 List<Map<String, Object>> 对象
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
while (rs.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnLabel(i);
Object value = rs.getObject(columnName);
map.put(columnName, value);
}
resultList.add(map);
}
// 使用 Gson 将 List<Map<String, Object>> 对象转化为 JSON 格式的字符串
Gson gson = new Gson();
String json = gson.toJson(resultList);
System.out.println(json);
// 使用 Gson 将 JSON 格式的字符串转化为 List<Map<String, Object>> 对象
List<Map<String, Object>> resultList2 = gson.fromJson(json, List.class);
// 将 List<Map<String, Object>> 对象转化为 ResultSet 对象
ResultSetMetaData metaData2 = rs.getMetaData();
ResultSet rs2 = new ResultSetImpl(resultList2, metaData2);
while (rs2.next()) {
System.out.println(rs2.getInt("id") + " " + rs2.getString("name"));
}
// 关闭 ResultSet、Statement 和 Connection 对象
rs.close();
stmt.close();
conn.close();
}
}
class ResultSetImpl implements ResultSet {
private List<Map<String, Object>> resultList;
private ResultSetMetaData metaData;
private int rowIndex = -1;
public ResultSetImpl(List<Map<String, Object>> resultList, ResultSetMetaData metaData) {
this.resultList = resultList;
this.metaData = metaData;
}
@Override
public boolean next() throws SQLException {
rowIndex++;
return rowIndex < resultList.size();
}
@Override
public String getString(String columnLabel) throws SQLException {
Object value = resultList.get(rowIndex).get(columnLabel);
return value == null ? null : value.toString();
}
// 实现 ResultSet 接口中的其他方法
}
```
需要注意的是,由于 ResultSet 接口中的方法较多,以上代码仅实现了部分方法,具体实现可根据需求进行扩展。另外,由于 ResultSet 接口是只读的,因此在实现 ResultSet 接口时不能包含更新、插入或删除等方法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)