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



我需要以下JSON格式,使用Java的ObjectMapper。

ObjectMapper mapper = new ObjectMapper();
User user = new User();
user.set_id(1);
int id = 2;
user.setIndex("{"_id":" + id + "}");
mapper.writeValue(new File("user.json"), user);

输出:{"索引":{"_id":"1"}}{"索引":{"_id":"2"}}

首先,

如果是用户列表,输出应该是

[{"index":{"_id":"1"}}, {"index":{"_id":"2"}}]

此外,如果你想以这种方式实现,我会说在你的基础Pojo上使用另一个Pojo,这样你就可以根据需要轻松地序列化和反序列化json。像这样的东西可能对你有用

-----------------------------------com.example.Index.java-----------------------------------
package com.example;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"index"
})
public class Index {
@JsonProperty("index")
public User index;
}
-----------------------------------com.example.Index_.java-----------------------------------
package com.example;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"_id"
})
public class User {
@JsonProperty("_id")
public String id;
}

现在要转换为所需的格式,您可以进行

mapper.writeValueAsString(index); //will return a string

输出看起来像User对象的结构:

{"id":1,"index":"{"_id":2}"}

不取决于你想做什么。你的输出格式显然不正确。您要显示的内容看起来像一个列表。您必须将用户对象包装在列表中才能获得所需的结果。

此外;id";不会出现在您的输出格式中。是否要直接在索引中包含id值?您需要重新思考您的对象或创建另一个对象来填充输出。

一个轨道可以是通过添加以下内容来更改id字段上json的名称:

@JsonProperty("_id")
private int id;

要使您的用户格式尝试这个:

public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
User user = new User();
user.setId(1);
mapper.writeValue(new File("user.json"), new Index(user));
}
@Data
public static class User {
@JsonProperty("_id")
private int    id;
public User() {
}
}
@Data
public static class Index {
@JsonProperty("index")
private User user;
public Index(User user) {
this.user = user;
}
}

对我来说,这无疑是一个你想要的列表。输出会像这样用于一个对象:

{"index":{"_id":1}}

相关内容

  • 没有找到相关文章

最新更新