Mule (Dataweave) 将 JSON 数组转换为字符串

Mule (Dataweave) transform JSON array to string

这可能很简单,但我在搜索中找到的所有内容都只是模糊地与我的问题相关。

我有这个:

{
  "user":"C03999",
  "caseNumber":"011-1234567",
  "documents":[
    {
        "file":[
            {"name":"indem1","document":"xSFSF%%GSF","mimeType":"PDF"},
            {"name":"indem2","document":"xSFSF%%GSF","mimeType":"PDF"}
            ]
        }
    ],
  "mortgagee":"22995",
  "billTo":"Originator",
  "agreementDate":"2016-11-25",
  "term":360,
  "expirationDate":"2017-11-25",
  "startDate":"Agreement",
  "lenderEndorsed":true,
  "lenderExecutedAgreement":false,
  "indemnificationAgreementTransferable":false,
  "qadLrsFileNumber":"2016-99999-9999",
  "docketNumber":"2016-9999-99"
}

我想从中取出这个字符串: 独立 1,独立 2

我创建了一个全局函数:

<configuration doc:name="Configuration">
     <expression-language autoResolveVariables="true">
         <global-functions>
             def convertToString(data){
                 return data.toString();
             }
         </global-functions>
     </expression-language>
</configuration>

我的转换看起来像这样:

%dw 1.0
%output application/csv
---
payload.documents.file map {
      "" : convertToString($.name)
}

我的输出如下: [独立 1\, 独立 2]

我需要做什么才能得到我想要的字符串 (indem1,indem2)?

你的问题标题说“JSON array To string”但是上面附加的数据编织代码在输出中有 application/csv。

您要转换成 csv 吗??如果这是预期,逗号是 .csv 格式的保留字符,这就是 , 被反斜杠转义的原因 [indem1\,indem2]。

如果你的意图是转换成java,这里是returns字符串值的代码。

%dw 1.0

%输出application/java

payload.documents[0].file.*name joinBy ','

一般来说,如果您有一个对象,并且需要以给定格式/MIME 类型写入该对象的一部分,请使用 write() 函数dw::Core 模块。如果您需要读取对象中的一些内容是 JSON/JAVA/CSV 而其余的是其他格式,请在同一模块中使用 read() 函数。

例如,假设您的负载为:

{
  field1: "foo",
  field2: { nested: "value" }
}

此外,假设您希望对象为 JAVA,但“field2”值被视为 JSON。你可以使用这个 DW:

output application/java
---
{
  field1: payload.field1,
  field2: write(payload.field2,'application/json')
}

结果是:

{
  field1: "foo",
  field2: '{ "nested": "value" }'
}

注意“field2”现在显示为嵌套的 JSON 对象,而不是 JAVA 对象。一种判断方法是 JSON 对象中的键在引号中,但在 JAVA 对象中它们不是。