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

如何用Rego合并JSON大小写敏感键值为统一小写键?

Rego实现不区分大小写键名合并值

输入JSON

{
    "data": {
        "abc": 123,
        "Abc": 345,
        "bcd": 789
    }
}

期望输出

{
    "data": {
        "abc": "123,345",
        "bcd": "789"
    }
}

需求:实现键名不区分大小写,将同一键(大小写不敏感)对应的多个值合并为逗号分隔的字符串。

遇到的错误

policy.rego:3: eval_conflict_error: object keys must be unique

尝试的Rego代码

result := {lower(key): input.data[key] | count(key)>0}

解决方案

你遇到的错误是因为直接用lower(key)作为对象键时,abc和Abc会生成同一个键,导致对象键冲突。正确的做法是先按小写键分组收集值,再将每组值转为逗号分隔字符串:

# 按小写键分组,收集对应所有值
grouped := {
    lower_key: values | 
        lower_key := lower(key);
        values := [input.data[k] | k := input.data[_]; lower(k) == lower_key]
}

# 将分组后的列表转为逗号分隔字符串,生成最终结果
result := {
    key: concat(",", [string(v) | v := vals]) 
    | key, vals := grouped[_]
}

代码说明

  1. 分组阶段:遍历输入的所有键,将键转为小写后作为分组键,收集所有对应小写键的原始值,形成键为小写、值为列表的对象。
  2. 字符串转换阶段:遍历分组结果,将每个列表中的数值转为字符串,再用concat函数拼接成逗号分隔的字符串,最终生成符合要求的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:25:35