使用 Jackson 将 json 字符串转换为通用 Map

斯科特

我从不同的服务获取以下对象,我需要将其解析为我的服务中的 POJO。传入的对象看起来像:AddressMessage.java

public class AddressMessage {

    @NotEmpty
    @JsonProperty("id")
    private String id;

    @NotEmpty
    @JsonProperty("address")
    private String address;

    public String getId() {
        return this.id;
    }

    public String getAddress() {
        return this.address;
    }

    @SuppressWarnings("unchecked")
    @JsonProperty("data")
    public void unpackNested(Map<String, Object> rawMessage) {
        Map<String, String> data = (Map<String, String>) rawMessage.get("data");
        this.id = (String) data.get("id");
        this.address = (String) data.get("address");
    }
}

传入的数据如下所示:

{“data”: { “id” : “sampleId”, “address”: “sampleAddress” }}

我试过将传入的 json 字符串解析为普通对象,但这不起作用:

private void publishMessage(String rawMessage, AMQP.BasicProperties props) throws IOException {
        Object json = objectMapper.readValue(rawMessage, Object.class);
        log.debug(objectMapper.writeValueAsString(json));

我还尝试接收原始消息并使用对象映射器将其直接映射到类,如下所示:

private void publishMessage(String rawMessage, AMQP.BasicProperties props) throws IOException {
   AddressMessage addressMessage = objectMapper.readValue(rawMessage, 
   AddressMessage.class);
}

上述代码的例外:

Unexpected character ('“' (code 8220 / 0x201c)): was expecting double-quote to start field name

我想从对象中提取“id”和“address”属性,但由于解析错误,我一直遇到异常。一些指导将不胜感激,谢谢!

另外:我目前没有使用“unpackNested”方法,但我想我会把它扔进去以防它引发任何想法

巧克力和奶酪

您可以@JsonCreator在构造函数上使用注释,如下所示:

@JsonCreator
public AddressMessage(@JsonProperty("data") Map<String, Object> rawJson) {
    this.id = rawJson.get("id").toString();
    this.address = rawJson.get("address").toString();
}

这告诉 Jackson 在反序列化时使用该构造函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Jackson将JSONArray转换为Map

如何使用Jackson JSON将JSON字符串转换为Map <String,Set <String >>

如何使用Jackson JSON将JSON字符串转换为Map <String,String>

使用Jackson将许多对象转换为JSON

使用Python将JSON字符串转换为dict

使用Jackson将Java对象转换为JSON

使用Jackson将JSON字符串转换为Pretty Print JSON输出

有什么方法可以在不写入文件的情况下使用Jackson将Map转换为JSON表示形式?

将json字符串转换为Java Map(JSONLib)

Jackson JSON将整数转换为字符串

使用Jackson将JSON字符串转换为Java映射时出错

使用Jackson ObjectIdGenerator将Json转换为Collection的问题

使用自定义类型将JSON字符串转换为Map

春季启动测试:使用Jackson ObjectMapper将模型转换为JSON字符串时,UserControllerTest失败

用Jackson将json字符串转换为List <List <String>

如何使用SwiftyJSON将字符串转换为JSON

使用Swift 4将HTML数据转换为JSON转换为字符串

使用jQuery将JSON字符串转换为Datatable

使用Swift将JSON字符串转换为NSDictionary

使用FasterXML Jackson将字符串转换为整数

展平JSON字符串以使用Gson或Jackson将包括每个级别键值的键映射为Map <String,String>

Scala将Map [String,Long]转换为JSON或JSON字符串

使用Ruby将YAML字符串转换为JSON

使用Java将字符串转换为JSON对象

如何使用gson将json转换为字符串

使用Jackson将JAXBElement <String>转换为json

使用Javascript将字符串转换为JSON

使用 jackson 将 csv 转换为 json

使用 PHP 将包含 JavaScript 对象的字符串转换为 JSON 字符串