You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保留循环添加对象到List的同时去除JSON字符串的数组括号

问题描述

我在循环中为对象添加属性,最终需要生成一个可作为查询参数的字符串,期望格式如下:

{"items":[{"itemsCode":"item1","isAvailable":false}],"isActive":false},{"items":[{"entryCode":"item2","isSelected":true}],"isActive":false}

但我用以下代码实现时:

List<Items> itemsList= new ArrayList<>();
itemsList.add(new Items(items, isBoolean));
ObjectMapper mapper = new ObjectMapper();
String itemsJson = mapper.writeValueAsString(itemsList);

对应的POJO:

public class Items {
    private List<Item> items;
    private Boolean isBoolean;
}

得到的结果是带外层数组括号的JSON:

[{"items":[{"itemsCode":"item1","isAvailable":false}],"isActive":false},{"items":[{"entryCode":"item2","isSelected":true}],"isActive":false}]

需要保留for循环将对象添加到List的实现方式,同时去除外层的数组括号。

解决方案

方法一:序列化后截取字符串

这是最简单直接的方式,List序列化后必然以[开头、]结尾,直接截取中间部分即可:

List<Items> itemsList= new ArrayList<>();
// 循环中添加Items对象到list
itemsList.add(new Items(items1, false));
itemsList.add(new Items(items2, false));

ObjectMapper mapper = new ObjectMapper();
String itemsJson = mapper.writeValueAsString(itemsList);
// 移除首尾的数组括号
String result = itemsJson.substring(1, itemsJson.length() - 1);

方法二:逐个序列化并拼接

如果担心字符串截取的潜在风险(比如极端场景下JSON内容本身包含首尾方括号),可以遍历List,逐个序列化每个对象后用逗号拼接:

List<Items> itemsList= new ArrayList<>();
// 循环中添加Items对象到list
itemsList.add(new Items(items1, false));
itemsList.add(new Items(items2, false));

ObjectMapper mapper = new ObjectMapper();
StringBuilder sb = new StringBuilder();
for (Items item : itemsList) {
    if (sb.length() > 0) {
        sb.append(",");
    }
    sb.append(mapper.writeValueAsString(item));
}
String result = sb.toString();

额外修正:POJO字段名匹配

你的期望输出中字段是isActive,但POJO里定义的是isBoolean,需要给POJO字段添加@JsonProperty注解指定序列化后的字段名,否则输出字段名会和预期不符:

import com.fasterxml.jackson.annotation.JsonProperty;

public class Items {
    private List<Item> items;
    @JsonProperty("isActive")
    private Boolean isBoolean;
    
    // 构造方法、getter/setter省略
}

内容的提问来源于stack exchange,提问作者jacob1989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:32:17