在java中,是否可以将单个json对象的逗号分隔列表序列化到集合中?

jk9hmnmh  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(324)

我正在尝试使用jackson将单个json对象的列表(用逗号分隔)序列化为java中某种类型的集合。
我是否正确地认为,由于json是如何呈现的,所以只能使用自定义Map器来实现这一点?
json输入:

{"_1":"186","_3":"In Stock"},{"_1":"187","_3":"In Stock"},{"_1":"188","_3":"In Stock"},{"_1":"189","_3":"In Stock"}

波乔

public class StockInfo {

    private String _1;

    private String _3;

    @JsonProperty("_1")
    public String get_1() {
        return _1;
    }

    @JsonProperty("_1")
    public void set_1(String _1) {
        this._1 = _1;
    }

    @JsonProperty("_3")
    public String get_3() {
        return _3;
    }

    @JsonProperty("_3")
    public void set_3(String _3) {
        this._3 = _3;
    }
}

序列化

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, true);

List<StockInfo> stockList = objectMapper.readValue(resultInputStream, new TypeReference<List<StockInfo>>(){});
gj3fmq9x

gj3fmq9x1#

jackson将无法解析它,因为它根本不是有效的json格式,除非json对象位于json数组中:

[{"_1":"186","_3":"In Stock"},{"_1":"187","_3":"In Stock"},{"_1":"188","_3":"In Stock"},{"_1":"189","_3":"In Stock"}]

如果无法控制数据的格式,可以将伪json字符串 Package 在方括号中,使其成为json数组:

// Wrap the pseudo-JSON string in square brackets, making it a JSON array
String jsonArray = "[" + pseudoJson + "]";

// Parse like you intended
List<StockInfo> stockList = objectMapper.readValue(jsonArray, new TypeReference<>() {});

或者可以拆分字符串,然后尝试分别解析每个对象:

// Split the pseudo-JSON string at commas preceded by a closing curly bracket
String[] jsonObjects = pseudoJson.split("(?<=}),");

// Parse each JSON object to a StockInfo instance and add it to a List
List<StockInfo> stockList = new ArrayList<>();
for(String jsonObject : jsonObjects) {
    StockInfo stockInfo = objectMapper.readValue(jsonObject, new TypeReference<>() {});
    stockList.add(stockInfo);
}

最接近Jackson的是 DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY ,但在你的情况下,你只能得到第一个元素。

相关问题