首页 > 解决方案 > 如何将 Dataweave 示例数据格式化为 LinkedHashMap

问题描述

我有这个LinkedHashMapLinkedHashMap$Entry有效载荷

{box=
   {
     0={plate=false, id=8269999, knife=1}, 
     1={plate=true, id=8260118, knife=1}
   }
}

我想将此结构应用于我的 Dataweave 转换示例数据。我想出了这个,但在运行时转换失败,而预览显示它是一个正确的转换......

%dw 1.0
%output application/java
---
[{
  "box": {
    "0": {
      "plate": {
        plate: false
      } as :object {
        class : "java.util.Object"
      },
      "id": {
        id: 8269999
      } as :object {
        class : "java.util.Object"
      },
      "knife": {
        knife: 1
      } as :object {
        class : "java.util.Object"
      }
    } as :object {
      class : "java.util.Object"
    },
    "1": {
      "plate": {
        plate: true
      } as :object {
        class : "java.util.Object"
      },
      "id": {
        id: 8260118
      } as :object {
        class : "java.util.Object"
      },
      "knife": {
        knife: 1
      } as :object {
        class : "java.util.Object"
      }
    } as :object {
      class : "java.util.Object"
    }
  } as :object {
    class : "java.util.Object"
  }
} as :object {
  class : "java.util.LinkedHashMap"
}]

标签: transformationdataweavesample-data

解决方案


java.util.Object 没有像knife 或plate 这样的字段,因此对其进行强制转换没有任何意义。您想要的只是删除脚本中的所有“as :object ...”,DataWeave 将根据需要返回地图。

而且通常地图中的条目(即 LinkedHashMap$Entry)根本不被直接引用。它们是特定地图实现的实现细节。

只考虑 Map 接口,而不是像 LinkedHashMap 这样的具体实现。


推荐阅读