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

如何在JSONata中迭代数组并添加基于金额判断的flag字段

给JSON中policyList元素添加全量判断flag的实现方案

需求说明

给定包含policyList数组的JSON对象,每个policyList元素包含product子数组,每个product对象都有amount字段。需要为每个policyList元素新增flag字段:

  • 当该元素下所有product的amount值为0时,flag = true
  • 只要有一个product的amount不为0,flag = false

实现方案(JavaScript)

假设你的原始JSON数据已解析为JavaScript对象,可通过以下代码完成处理:

// 原始JSON解析后的对象
const data = {
  "policyList": [
    {
      "product": [{"amount": 0}, {"amount": 0}]
    },
    {
      "product": [{"amount": 0}, {"amount": 120}]
    }
  ]
};

// 遍历处理每个policyList元素
data.policyList.forEach(policy => {
  // 用every方法判断所有product的amount是否全为0
  policy.flag = policy.product.every(item => item.amount === 0);
});

// 输出处理后的JSON
console.log(JSON.stringify(data, null, 2));

实现方案(jq命令行工具)

如果需要在命令行批量处理JSON文件,可使用jq工具:

# 处理input.json并输出到output.json
jq '.policyList[] |= (.flag = (.product | all(.amount == 0)))' input.json > output.json

处理后结果示例

{
  "policyList": [
    {
      "product": [
        {"amount": 0},
        {"amount": 0}
      ],
      "flag": true
    },
    {
      "product": [
        {"amount": 0},
        {"amount": 120}
      ],
      "flag": false
    }
  ]
}

逻辑说明

  • JavaScript中,Array.prototype.every()会遍历数组,只有当所有元素都满足条件(amount === 0)时返回true,否则返回false
  • jq中,all(.amount == 0)用于判断product数组的所有元素是否符合条件,通过|=将结果赋值给新增的flag字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:16:14