【问题标题】:how to parse a string with escaped json using dataweave 2.0如何使用 dataweave 2.0 解析带有转义 json 的字符串
【发布时间】:2021-04-01 16:08:46
【问题描述】:

我需要解析这样一个 API 的响应:

"[{\"Customers\":[{\"Id\":1607715391563}],\"Partners\":[],\"ModDate\":\"\\/Date(1608031919597)\\/\",\"CreatedByUserId\":null},{\"Message\":null,\"Code\":\"200\",\"NextPage\":1}]"

我希望我是这样的:

[
   {
      "Customers":[
         {
            "Id":1607715391563
         }
      ],
      "Partners":[
         
      ],
      "ModDate":"/Date(1608031919597)/",
      "CreatedByUserId":null
   },
   {
      "Message":null,
      "Code":"200",
      "NextPage":1
   }
]

我已经尝试使用payload[1 to -2] 删除字符串,并使用read(payload[1 to -2], 'application/json') 解析JSON。我已经尝试遵循link 的一些提示,但都没有成功。

编辑: 这里的重点是我想访问,例如,其他连接器中的 Customers.Id 值,我不能

【问题讨论】:

  • 输入不是'slashed' JSON,而是一个转义的JSON输入。
  • aled,谢谢你的评论,我改了标题
  • 你好。这个字符串是从哪里来的?也许您只需要在源中设置正确的 Mime 类型。如果在原点无法解决,Salim 的解决方案似乎是更好的方法。
  • 豪尔赫,感谢您的评论。 Salim 的解决方案在这里运行良好 :)

标签: json parsing dataweave mule4


【解决方案1】:

这个怎么样?

%dw 2.0
output application/json
var inpString = "[{\"Customers\":[{\"Id\":1607715391563}],\"Partners\":[],\"ModDate\":\"\\/Date(1608031919597)\\/\",\"CreatedByUserId\":null},{\"Message\":null,\"Code\":\"200\",\"NextPage\":1}]"
---
read(inpString,"application/json")

【讨论】:

  • 这应该是正确的答案。问题是由于某种原因,输入是一个转义的 JSON 文档。使用 read() 解析它会返回预期的结果。
【解决方案2】:

您可以尝试以下 DataWeave 表达式:

%dw 2.0
output application/json
---
read((payload replace /^"|"$/ with '') replace '\"' with '"', "application/json")

第一个替换将删除标题和尾随双引号,第二个替换将用双引号替换反斜杠转义双引号。

【讨论】:

  • olamiral,感谢您的回答。尽管这可行,但我需要访问例如 Customers.Id 值,但我仍然无法使用您的表达方式
  • 嗨,我!您可以验证这是否准确回答了您的问题。您能否更新您的问题以反映您真正想要实现的目标?谢谢。
  • 对不起olamiral,这是我的错误。您的代码确实有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 2021-12-02
相关资源
最近更新 更多