是否可以将单个 JSON 对象的逗号分隔列表序列化为 Java 中的集合?

Is it possible to serialise a comma delimited list of single JSON objects to a collection in Java?

我正在尝试序列化单个 JSON 对象的列表,用逗号分隔到 Java 中使用 Jackson 的某种集合。

由于 JSON 的呈现方式,我认为只有使用自定义映射器才有可能实现这一点是否正确?

JSON 输入:

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

POJO

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>>(){});

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 字符串括在方括号中,使其成为 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,但在你的情况下你只会得到第一个元素。