JOLT符号(#、@、&等)解析及指定JSON转换需求咨询
JOLT转换方案及符号解释
输入JSON
{"found": true,"consultado": "00000000","nome": "EMPRESA DE CNPJ 00000000 LTDA","socio": [{"cpfCnpj": "11111111111","nome": "PESSOA DE CPF 11111111111","descricaoCargo": "Sócio","outrasEmpresasSocio": [{"cnpj": "11111111","nome": "EMPRESA DE CNPJ 11111111 LTDA","descricaoCargo": "Sócio-Administrador"}]},{"cpfCnpj": "00000000000","nome": "PESSOA DE CPF 00000000000","descricaoCargo": "Sócio-Administrador","outrasEmpresasSocio": [{"cnpj": "11111111","nome": "EMPRESA DE CNPJ 11111111 LTDA","descricaoCargo": "Sócio-Administrador"},{"cnpj": "22222222","nome": "EMPRESA DE CNPJ 22222222 LTDA","descricaoCargo": "Sócio-Administrador"},{"cnpj": "33333333","nome": "EMPRESA DE CNPJ 33333333 LTDA","descricaoCargo": "Sócio-Administrador"}]}]}
目标输出
[{"cpfCnpj": "11111111111","nome": "PESSOA DE CPF 11111111111","cnpj": "11111111","nome": "EMPRESA DE CNPJ 11111111 LTDA","descricaoCargo": "Sócio-Administrador"},{"cpfCnpj": "00000000000","nome": "PESSOA DE CPF 00000000000","cnpj": "11111111","nome": "EMPRESA DE CNPJ 11111111 LTDA","descricaoCargo": "Sócio-Administrador"},{"cpfCnpj": "00000000000","nome": "PESSOA DE CPF 00000000000","cnpj": "22222222","nome": "EMPRESA DE CNPJ 22222222 LTDA","descricaoCargo": "Sócio-Administrador"},{"cpfCnpj": "00000000000","nome": "PESSOA DE CPF 00000000000","cnpj": "33333333","nome": "EMPRESA DE CNPJ 33333333 LTDA","descricaoCargo": "Sócio-Administrador"}]
JOLT转换规格
[ { "operation": "shift", "spec": { "socio": { "*": { "outrasEmpresasSocio": { "*": { "@2,cpfCnpj": "[]&1.cpfCnpj", "@2,nome": "[]&1.nome", "cnpj": "[]&1.cnpj", "nome": "[]&1.nome", "descricaoCargo": "[]&1.descricaoCargo" } } } } } } ]
关键符号解释
1. #
- 用于静态赋值,直接输出固定字符串或数值,和输入JSON的内容无关。
- 示例:
"#固定内容": "目标键"会生成"目标键": "固定内容"
2. @
- 用于引用输入JSON中的字段值,通过层级路径定位数据。
- 格式:
@[层级偏移],[字段名],层级偏移表示向上回溯的层级数(0代表当前层级,1代表父层级,2代表祖父层级)。 - 示例:
@2,cpfCnpj表示回溯到祖父层级(即当前outrasEmpresasSocio的祖父socio对象),取其中的cpfCnpj字段值。
3. &
- 用于引用当前匹配的键名,常用于数组遍历或动态键名映射。
- 格式:
&[层级偏移],层级偏移表示向上回溯的键名层级。 - 示例:
&1表示引用父层级的键名(这里是outrasEmpresasSocio数组的索引,用来确保每个子公司条目和对应的股东信息配对);[]&1表示将数据放入以该键名为标识的数组元素中,最终合并为一个数组。
4. ()
- 用于分组和优先级控制,或在
modify操作中定义表达式(比如字符串拼接、数值计算)。 - 示例:在
modify操作中,"全名": "=concat(@(1,名), ' ', @(1,姓))",通过()包裹路径精准引用字段,实现字符串拼接。
5. []
- 用于数组处理,核心有两种用法:
- 作为输入路径:
socio[*]表示遍历socio数组中的所有元素; - 作为输出路径:
"[]": "目标字段"表示将目标字段的值放入新数组,或合并多个元素到同一个数组中(如本方案中的[]&1,确保每个股东-子公司配对成为数组的一个元素)。
- 作为输入路径:
内容的提问来源于stack exchange,提问作者Mateus Costa Luz
相关产品推荐
相关产品推荐

