首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以将单个JSON对象的逗号分隔列表序列化为Java中的集合?

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

Stack Overflow用户
提问于 2020-12-05 20:35:13
回答 1查看 355关注 0票数 0

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

由于JSON的表示方式,只有使用自定义映射器才能做到这一点,这样的想法正确吗?

JSON输入:

代码语言:javascript
运行
复制
{"_1":"186","_3":"In Stock"},{"_1":"187","_3":"In Stock"},{"_1":"188","_3":"In Stock"},{"_1":"189","_3":"In Stock"}

POJO

代码语言:javascript
运行
复制
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;
    }
}

序列化

代码语言:javascript
运行
复制
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, true);

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-05 22:04:55

Jackson无法解析它,因为它根本不是有效的JSON格式,除非JSON对象在JSON数组中:

代码语言:javascript
运行
复制
[{"_1":"186","_3":"In Stock"},{"_1":"187","_3":"In Stock"},{"_1":"188","_3":"In Stock"},{"_1":"189","_3":"In Stock"}]

如果您无法控制获取数据的格式,则可以将伪JSON字符串封装在方括号中,使其成为JSON数组:

代码语言:javascript
运行
复制
// 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<>() {});

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

代码语言:javascript
运行
复制
// 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);
}

杰克逊提供的最接近的东西是DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,但在您的例子中,您只会得到第一个元素。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65156984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档