You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Jackson解析JSON时如何将Payload字段视为字符串?

解决Jackson把payLoad字段当作原始字符串解析的问题

刚好之前处理过一模一样的场景!核心就是让Jackson别去解析payLoad里的内容,直接把它当成纯字符串读出来,给你两种实用的实现方式,根据你的代码结构选就行:

方式一:用@JsonRawValue注解(最简单)

@JsonRawValue是Jackson专门用来处理这种“原样保留原始内容”的注解,虽然它一开始是为序列化设计的,但2.0版本之后也完美支持反序列化。

先给你的实体类加上这个注解:

public class Record {
    private String recordId;
    
    // 关键就是这行注解!
    @JsonRawValue
    private String payLoad;

    // 下面的Getter/Setter该咋写咋写
    public String getRecordId() { return recordId; }
    public void setRecordId(String recordId) { this.recordId = recordId; }
    public String getPayLoad() { return payLoad; }
    public void setPayLoad(String payLoad) { this.payLoad = payLoad; }
}

然后解析你的示例JSON试试:

String json = "{ \"recordId\":\"48\", \"payLoad\":{\"firstName\":\"John\",\"lastName\":\"Doe\"}}";
ObjectMapper mapper = new ObjectMapper();
Record record = mapper.readValue(json, Record.class);

// 这时候payLoad拿到的就是原始的JSON字符串:"{\"firstName\":\"John\",\"lastName\":\"Doe\"}"
System.out.println(record.getPayLoad());

不管payLoad里面是JSON对象、YAML文本还是CSV内容(只要在原始JSON里是合法的格式,比如CSV要包成字符串),这个注解都能直接把内容原样转成Java字符串,省心得很。

方式二:自定义反序列化器(应对复杂场景)

如果你的payLoad格式特别跳脱——比如有时候是JSON对象,有时候是带引号的CSV字符串,甚至偶尔是数组——那自定义反序列化器会更灵活:

  1. 先写个反序列化器类,逻辑就是直接读取节点的原始字符串:
public class RawStringDeserializer extends JsonDeserializer<String> {
    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        // 不管当前节点是啥类型,直接转成原始字符串返回
        return p.readValueAsTree().toString();
    }
}
  1. 然后在实体类的payLoad字段上指定用这个反序列化器:
public class Record {
    private String recordId;
    
    @JsonDeserialize(using = RawStringDeserializer.class)
    private String payLoad;

    // Getter/Setter照旧
}

这种方式能覆盖各种奇怪的边缘情况,怎么都能把payLoad的内容当成纯字符串读出来。

小提醒

要是payLoad里是CSV内容,在原始JSON里必须把它包成字符串(加双引号),比如"payLoad": "firstName,lastName\nJohn,Doe",不然Jackson会因为格式不合法报错哦。

内容的提问来源于stack exchange,提问作者Janet T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:20:01