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

如何过滤JSON数组?基于isCalculatedField:false筛选动态JSON数组

没问题!我来帮你搞定这个JSON数组筛选的需求。根据你给出的示例,我们需要把所有isCalculatedField: false的对象过滤出来,下面是几种主流语言的实现方式,你可以根据自己的技术栈选择:

JavaScript 实现

JavaScript里用数组的filter()方法最直接,一行代码就能搞定:

const originalArray = [
  { 
    "id": "CX.VOEFAIL.CREATEDT", 
    "description": "Task Management - Voe Fail Review Create Date", 
    "format": "STRING", 
    "maxLength": 40, 
    "modelPath": "Loan.CustomFields[(FieldName == 'CX.VOEFAIL.CREATEDT')].StringValue", 
    "isCalculatedField": false 
  },
  { 
    "id": "CX.VOEFAIL.TASKCNT", 
    "description": "Task Management - VOE Fail Review Task Count", 
    "format": "INTEGER", 
    "maxLength": 0, 
    "modelPath": "Loan.CustomFields[(FieldName == 'CX.VOEFAIL.TASKCNT')].IntValue", 
    "isCalculatedField": true 
  }
];

// 严格筛选isCalculatedField等于false的项
const filteredArray = originalArray.filter(item => item.isCalculatedField === false);

console.log(filteredArray);

如果担心某些对象没有isCalculatedField字段,可以加个判断避免报错:

const filteredArray = originalArray.filter(item => 
  item.hasOwnProperty('isCalculatedField') && item.isCalculatedField === false
);
Python 实现

Python里用列表推导式是最简洁的写法,也可以用filter()函数:

original_array = [
    { 
        "id": "CX.VOEFAIL.CREATEDT", 
        "description": "Task Management - Voe Fail Review Create Date", 
        "format": "STRING", 
        "maxLength": 40, 
        "modelPath": "Loan.CustomFields[(FieldName == 'CX.VOEFAIL.CREATEDT')].StringValue", 
        "isCalculatedField": False 
    },
    { 
        "id": "CX.VOEFAIL.TASKCNT", 
        "description": "Task Management - VOE Fail Review Task Count", 
        "format": "INTEGER", 
        "maxLength": 0, 
        "modelPath": "Loan.CustomFields[(FieldName == 'CX.VOEFAIL.TASKCNT')].IntValue", 
        "isCalculatedField": True 
    }
]

# 方法1:列表推导式(推荐,更符合Python风格)
filtered_array = [item for item in original_array if not item.get("isCalculatedField", True)]

# 方法2:使用filter+lambda
filtered_array = list(filter(lambda x: x.get("isCalculatedField", True) is False, original_array))

print(filtered_array)

这里用item.get("isCalculatedField", True)是为了处理没有该字段的情况——默认把这类对象排除(返回True,所以not之后就是False,不会被加入结果)。如果想保留无该字段的对象,把默认值改成False就行。

Java 实现

Java 8及以上可以用Stream API来快速筛选,先把JSON解析成实体类或者Map,再进行过滤:

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import java.util.stream.Collectors;

public class JsonFilterDemo {
    public static void main(String[] args) throws Exception {
        // 模拟解析后的实体类列表(实际项目中可通过Jackson/Gson解析JSON字符串)
        List<CustomField> originalList = List.of(
            new CustomField("CX.VOEFAIL.CREATEDT", "Task Management - Voe Fail Review Create Date", "STRING", 40, "Loan.CustomFields[(FieldName == 'CX.VOEFAIL.CREATEDT')].StringValue", false),
            new CustomField("CX.VOEFAIL.TASKCNT", "Task Management - VOE Fail Review Task Count", "INTEGER", 0, "Loan.CustomFields[(FieldName == 'CX.VOEFAIL.TASKCNT')].IntValue", true)
        );

        // 筛选isCalculatedField为false的元素
        List<CustomField> filteredList = originalList.stream()
                .filter(field -> !field.isCalculatedField())
                .collect(Collectors.toList());

        // 输出结果(转回JSON字符串)
        ObjectMapper mapper = new ObjectMapper();
        System.out.println(mapper.writeValueAsString(filteredList));
    }

    // 对应JSON结构的实体类
    static class CustomField {
        private String id;
        private String description;
        private String format;
        private int maxLength;
        private String modelPath;
        private boolean isCalculatedField;

        // 构造函数
        public CustomField(String id, String description, String format, int maxLength, String modelPath, boolean isCalculatedField) {
            this.id = id;
            this.description = description;
            this.format = format;
            this.maxLength = maxLength;
            this.modelPath = modelPath;
            this.isCalculatedField = isCalculatedField;
        }

        // Getter方法
        public boolean isCalculatedField() {
            return isCalculatedField;
        }

        // 其他Getter省略,实际项目中需要补充
    }
}

小提示

如果你的JSON数组里存在部分对象没有isCalculatedField字段的情况,一定要根据业务需求决定是否保留这类对象——上面的示例默认是排除它们,你可以调整判断逻辑来适配自己的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:21:16