[英]GSON parse a JSON value
我正在处理以 Java 编写的 web 服务,我必须从 JSON 格式获得响应。 以下是 JSON。如何正确获取这些值以便使用它们?
{
"message": "string",
"validationErrors": [
{
"code": "string",
"message": "string"
}
],
"exceptionMessages": [
{
"code": "string",
"message": "string"
}
],
"trailId": "string",
"isSuccessful": true
}
这就是我正在尝试的,但我遇到了错误。
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
Type listErrors = new TypeToken<List<Response>>() {}.getType();
List<Response> list = gson.fromJson(response.toString(), listErrors);
这是我在测试时遇到的错误。
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
响应.java
import java.util.List;
public class Response{
public Response() {
super();
}
private String message;
private List<ValidationErrors> errors;
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setErrors(List<ValidationErrors> errors) {
this.errors = errors;
}
public List<ValidationErrors> getErrors() {
return errors;
}
}
验证错误.java
public class ValidationErrors {
public ValidationErrors() {
super();
}
private String code;
private String message;
public void setCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
正如我的理解是正确的,你只得到一个 object,而不是列表:
Response result = gson.fromJson(response.toString(), Response.class);
要 map object correctl,您还必须重命名属性,以便它们适合 json 结构中的键名:
import java.util.List;
public class Response{
public Response() {
super();
}
private String message;
private List<ValidationErrors> validationErrors;
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setValidationErrors(List<ValidationErrors> errors) {
this.validationErrors = errors;
}
public List<ValidationErrors> getValidationErrors() {
return errors;
}
}
或为其添加SerializedName
注解:
import java.util.List;
public class Response{
public Response() {
super();
}
private String message;
@SerializedName("validationErrors")
private List<ValidationErrors> errors;
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setErrors(List<ValidationErrors> errors) {
this.errors = errors;
}
public List<ValidationErrors> getErrors() {
return errors;
}
}
并为缺少的键exceptionMessages
、 trailId
和isSuccessful
添加属性。
您收到此错误,因为您的 json 响应是 object 并且您正在尝试解析,因为它是一个数组,但它不是..
这就是为什么它显示为com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
你应该替换下面提到的代码
从
Type listErrors = new TypeToken<List<Response>>() {}.getType();
List<Response> list = gson.fromJson(response.toString(), listErrors);
到
Response objectResponse = gson.fromJson(response.toString(), Response.class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.