How to remove trailing comma from a object inside a json array using dataweave?

问题描述 投票:0回答:2

如何从 json 数组中的对象的每一行中删除尾随逗号? 样本输入:

[
  {
    "dc": "cn=Cggzci,dc=maxcrc,dc=com",
    "objectClass": "top",
    "objectClass": "person",
    "cn": "Cggzci",
    "sn": "Mqemdv"
  },
  {
    "dc": "cn=Vntlww,dc=maxcrc,dc=com",
    "objectClass": "top",
    "objectClass": "person",
    "cn": "Vntlww",
    "sn": "Fehiqr"
  }
]

数据编织:

%dw 2.0
output text/plain
var test = (write(payload,'application/json'))
---
test replace /\[\n|\n\]|\{|\},\n|\}|"/ with ""

收到的输出:

dc: cn=Cggzci,dc=maxcrc,dc=com,
objectClass: top,
objectClass: person,
cn: Cggzci,
sn: Mqemdv

dc: cn=Vntlww,dc=maxcrc,dc=com,
objectClass: top,
objectClass: person,
cn: Vntlww,
sn: Fehiqr

要求输出在每一行中都应该没有尾随逗号,并删除每行开头的空格。

dataweave mulesoft mule4
2个回答
1
投票

我建议避免像这样的事情使用正则表达式。更好地转换数据的结构。

%dw 2.0
output text/plain
fun printRecord(x)=x pluck ($$ as String ++ ": " ++ $) joinBy "\n"
---
payload map printRecord($) joinBy "\n\n"

输出:

dc: cn=Cggzci,dc=maxcrc,dc=com
objectClass: top
objectClass: person
cn: Cggzci
sn: Mqemdv

dc: cn=Vntlww,dc=maxcrc,dc=com
objectClass: top
objectClass: person
cn: Vntlww
sn: Fehiqr

0
投票

实现问题的最好方法不是替换,而是处理数据结构并生成输出

%dw 2.0
output text/plain

fun toFlat(value: Array<Object>): String =
    value map ((item, index) -> toFlat(item))
        joinBy  "\n\n"

fun toFlat(value: Object) : String = 
    value pluck ((value, key, index) -> "$(key): $(value as String)") 
          joinBy  "\n"   
---
toFlat(payload)

这将输出你想要的,不依赖于你的输入值,而是依赖于你的输入形状一个对象数组

© www.soinside.com 2019 - 2024. All rights reserved.