gpt4 book ai didi

json - 当对象名称中包含 DOT 时如何从 json 对象中检索字段值

转载 作者:行者123 更新时间:2023-12-01 09:59:21 25 4
gpt4 key购买 nike

我想使用 fasterxml.jackson 从下面的 json 中提取“msg”值- 谁能建议我的模型课应该是什么样子?

{
"statusCode": 422,
"error": "Unprocessable Entity",
"message": "Bad data received",
"err_data": {
"payment_details.type": {
"location": "body",
"param": "payment_details.type",
"msg": "Must be either etransfer or cheque"
}
}
}

这就是我所做的,但它总是返回 "null"!
@JsonInclude(JsonInclude.Include.ALWAYS)
public class MyApiResponse extends ParentResponse implements Serializable {
private static final long serialVersionUID = 1L;

@JsonProperty("payment_details")
private PaymentDetails payment_details;

@JsonProperty("payment_details")
public PaymentDetails getPayment_details() {
return payment_details;
}

@JsonProperty("payment_details")
public void setPayment_details(PaymentDetails payment_details) {
this.payment_details = payment_details;
}
}
ParentResponse模型类扩展 ErrorResponse模型类,这就是它的样子..

这个 ErrorResponse模型代表上面提到的 JSON。
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ErrorResponse implements Serializable {

private static final long serialVersionUID = 1L;

@JsonProperty("statusCode")
private int statusCode;

@JsonProperty("error")
private String error;

@JsonProperty("message")
private String message;

@JsonProperty("err_data")
private ErrData err_data;

@JsonProperty("statusCode")
public int getStatusCode() {
return statusCode;
}

@JsonProperty("statusCode")
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}

@JsonProperty("message")
public String getMessage() {
return message;
}

@JsonProperty("message")
public void setMessage(String message) {
this.message = message;
}

@JsonProperty("error")
public String getError() {
return error;
}

@JsonProperty("error")
public void setError(String error) {
this.error = error;
}

@JsonProperty("err_data")
public ErrData getErr_data() {
return err_data;
}

@JsonProperty("err_data")
public void setErr_data(ErrData err_data) {
this.err_data = err_data;
}
}
err_data对象由以下模型类表示。
@JsonInclude(JsonInclude.Include.ALWAYS)
public class ErrData implements Serializable {

private static final long serialVersionUID = 1L;

@JsonProperty("email")
private Email email;

@JsonProperty("payment_details.type")
private PaymentDetailsType payment_details_type;

@JsonProperty("email")
public Email getEmail() {
return email;
}

@JsonProperty("email")
public void setEmail(Email email) {
this.email = email;
}

@JsonProperty("payment_details.type")
public PaymentDetailsType getPayment_details_type() {
return payment_details_type;
}

@JsonProperty("payment_details.type")
public void setPayment_details_type(PaymentDetailsType payment_details_type) {
this.payment_details_type = payment_details_type;
}
}
payment_details.type由下面的类表示的对象。
@JsonInclude(JsonInclude.Include.ALWAYS)
public class PaymentDetailsType extends ErrorMessage implements Serializable {

private static final long serialVersionUID = 1L;

}

@JsonInclude(JsonInclude.Include.ALWAYS)
public class Email extends ErrorMessage implements Serializable {

private static final long serialVersionUID = 1L;

}

最后 ErrorMessagePaymentDetailsType 扩展如下。
@JsonPropertyOrder({"location", "param", "value", "msg"})
public class ErrorMessage implements Serializable {

private static final long serialVersionUID = 1L;

@JsonProperty("location")
private String location;

@JsonProperty("param")
private String param;

@JsonProperty("value")
private String value;

@JsonProperty("msg")
private String msg;

@JsonProperty("location")
public String getLocation() {
return location;
}

@JsonProperty("location")
public void setLocation(String location) {
this.location = location;
}

@JsonProperty("param")
public String getParam() {
return param;
}

@JsonProperty("param")
public void setParam(String param) {
this.param = param;
}

@JsonProperty("value")
public String getValue() {
return value;
}

@JsonProperty("value")
public void setValue(String value) {
this.value = value;
}

@JsonProperty("msg")
public String getMsg() {
return msg;
}

@JsonProperty("msg")
public void setMsg(String msg) {
this.msg = msg;
}
}

最后我试图获得“msg”字段值,如下所示 -
new Gson().fromJson(response.asString(), MyApiResponse.class).getErr_data().getPayment_details_type().getMsg();

我认为这个有问题 - 如果 json 中的字段名称为 . (点)。
@JsonProperty("payment_details.type")
public PaymentDetailsType getPayment_details_type() {
return payment_details_type;
}

与上面类似,我正在为下面的 json 检索“msg”值,它工作正常。
{
"statusCode": 422,
"error": "Unprocessable Entity",
"message": "Bad data received",
"err_data": {
"email": {
"location": "body",
"param": "email",
"value": "test @ com",
"msg": "Must be a valid email"
}
}
}

这将返回正确的“msg”值。
new Gson().fromJson(response.asString(), MyApiResponse.class).getErr_data().getEmail().getMsg();

请建议!

谢谢你。

最佳答案

这是一个最小的示例,展示了如何使用 Jackson 解析 JSON,其中属性名称可能包含点:

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

class Main {
public static void main(String[] args) throws IOException {
String json = "{" +
" \"payment_details.type\": {" +
" \"location\": \"body\"" +
" }" +
"}";
ObjectMapper mapper = new ObjectMapper();
Response response = mapper.readValue(json, Response.class);
System.out.println(response.getPaymentDetailsType().getLocation());
}
}

class Response {
@JsonProperty("payment_details.type")
private PaymentDetailsType paymentDetailsType;

public PaymentDetailsType getPaymentDetailsType() { return paymentDetailsType; }
}

class PaymentDetailsType {
private String location;

public String getLocation() { return location; }
}

请注意,您只需要 @JsonProperty当 JSON 中的预期属性名称无法从 setter 或变量名称中推导出来时

关于json - 当对象名称中包含 DOT 时如何从 json 对象中检索字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48940985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com