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

如何对数组内对象的所有值应用$replace函数去除特殊字符?

JSONata处理对象值去除特殊字符报错解决

原始JSON数据

{
  "result": [
      {
          "codigo_produto": "10162",
          "gtin": "0000040084107",
          "descricao_produto": "Kinder Ovo",
          "un_venda": "UN",
          "segmento_1": "10000",
          "cod_segmento_1": "Geral"
      },
      {
          "codigo_produto": "185680",
          "gtin": "7892840127114",
          "descricao_produto": "Pingo D'ouro Picanha 65gr",
          "un_venda": "UN",
          "segmento_1": "10000",
          "cod_segmento_1": "Geral"
      }
  ]
}

需求

对result数组内每个对象的所有值应用$replace($value, /[^a-zA-Z0-9 ]/, ''),去除所有特殊字符。

尝试的错误代码及报错

错误代码

$ ~> | result |  
    $each(
        function($object) {
            $each($object, function($k, $v) {
                {$k: $replace($v, /[^a-zA-Z0-9 ]/, '') }
            })
        } 
    ) ~> $merge() |

报错信息

Argument 1 of function "each" does not match function signature

解决方案

错误原因

  1. 参数顺序错误:JSONata中$each处理对象时,回调函数的参数顺序是($value, $key),你写成了($k, $v),导致参数不匹配函数签名。
  2. 缺少对象合并:内层$each会返回多个独立的键值对对象,需要用$merge()将它们合并为一个完整的对象,否则无法生成有效的商品对象。

修正后的代码

方案一:调整参数顺序并添加合并

$ ~> | result |  
    $each(
        function($object) {
            $merge($each($object, function($v, $k) {
                {$k: $replace($v, /[^a-zA-Z0-9 ]/, '') }
            }))
        } 
    ) |

方案二:使用$objectTransform更简洁实现

$objectTransform是JSONata中专门用于转换对象键值的函数,写法更简洁:

$ ~> | result |  
    $each(function($obj) {
        $objectTransform($obj, function($k, $v) {
            $replace($v, /[^a-zA-Z0-9 ]/, '')
        })
    }) |

处理后结果

第二个商品的descricao_produto会从"Pingo D'ouro Picanha 65gr"变为"Pingo Douro Picanha 65gr",所有特殊字符被去除,其他字段保持原样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:23:13