json - 在 Mule 中使用 Dataweave 读取数组值
问题描述
我正在尝试在 Mule 中使用 dataweave 从传入的有效负载中读取特定的数据值。我的示例有效载荷如下所示:
{
"source": [
{
"uri": "entities/1R6xV",
"createdBy": "API_USER",
"createdTime": 1562504739146,
"attributes": {
"label": "000000000002659654",
"value": {
"Name": [
{
}
],
"Id": [
{
}
],
"Number": [
{
"type": "config/Types/Number/attributes/Number",
"ov": true,
"value": "000000000002659654",
"uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
}
]
}
}
}
]
}
如果我需要阅读“标签”,我可以通过
label: payload.source.attributes.label
同样,如何读取属性>数字下的“值”。它不起作用:
Value: payload.source.attributes.Number.value
我是 Dataweave 的新手。请指教。
解决方案
问题是点选择器 (.) 适用于对象和对象数组。当它应用于数组时,它将点选择器应用于数组中所有类型为 object 的元素并返回该结果。
让我们一步一步来
payload.source
退货
[
{
"uri": "entities/1R6xV",
"createdBy": "API_USER",
"createdTime": 1562504739146,
"attributes": {
"label": "000000000002659654",
"value": {
"Name": [
{
}
],
"Id": [
{
}
],
"Number": [
{
"type": "config/Types/Number/attributes/Number",
"ov": true,
"value": "000000000002659654",
"uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
}
]
}
}
}
]
到目前为止,payload 是一个 Object,它返回 source 的值,它是一个数组
payload.source.attributes
退货
[
{
"label": "000000000002659654",
"value": {
"Name": [
{
}
],
"Id": [
{
}
],
"Number": [
{
"type": "config/Types/Number/attributes/Number",
"ov": true,
"value": "000000000002659654",
"uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
}
]
}
}
]
工作正常,因为payload.source的结果以对象数组结束,因此它将对这些对象进行选择。
现在当你执行
payload.source.attributes.value.Number
它返回
[
[
{
"type": "config/Types/Number/attributes/Number",
"ov": true,
"value": "000000000002659654",
"uri": "entities/1R6xV/attributes/Num/1ZtyT/Number/60pvN6"
}
]
]
那是一个数组数组,这里是它被破坏的地方。
我的解决方案
你有两种选择
使用展平功能
展平(有效载荷.source.attributes.value.Number).value
使用后代选择器
payload.source.attributes.value.Number..value
推荐阅读
- javascript - 复选框 isChecked 不影响价格
- unit-testing - 开玩笑测试 Vue 组件抛出错误“无法读取未定义的'key'...”
- python - 使用 Flask Python 创建 POST 任意路径路由
- c++ - 如果可能,取消引用指向类型的 C++ 指针
- kivy - 基维。在一个变量中设置前端和后端的颜色
- c# - 即使没有文件,StreamReader 也不会抛出 FileNotFound 异常,它应该
- c# - 使用 NUnit 和 Moq 测试 Void 方法调用其他 Void 方法
- sql - 通过连接表 B 和表 A 更新表 A
- odoo - 以编程方式编辑 odoo 网站内容
- java - java中链表的递归求和函数