Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mule 在Dataweave 2.0中将属性文件中的属性转换为json_Mule_Dataweave_Mule Esb - Fatal编程技术网

Mule 在Dataweave 2.0中将属性文件中的属性转换为json

Mule 在Dataweave 2.0中将属性文件中的属性转换为json,mule,dataweave,mule-esb,Mule,Dataweave,Mule Esb,如何从属性文件转换属性 creditmaster.metadata.AverageFicoScore=700 creditmaster.a.b.c=xyz 以通用方式转换为此json格式 { creditmasterMetaData: [ { attributeKey: "AverageFicoScore", attributeValue: 700 } ] } 另一种选择是使用Pull功能。它允许您迭代接收条目的对象

如何从属性文件转换属性

creditmaster.metadata.AverageFicoScore=700
creditmaster.a.b.c=xyz
以通用方式转换为此json格式

{
  creditmasterMetaData: [
     {
       attributeKey: "AverageFicoScore",
       attributeValue: 700
     }
  ]
}

另一种选择是使用Pull功能。它允许您迭代接收条目的对象

如果你有这个输入

{
  "creditmaster": {
    "metadata": {
      "AverageFicoScore": "700",
      "OtherData": "Some value"
    }
  }
}
随着这种转变

{
  creditmasterMetaData:
    payload.creditmaster.metadata pluck ((value, key, index) -> 
      {
        attributeKey: key,
        attributeValue: value
      }
    )
}
你得到这个输出

{
  "creditmasterMetaData": [
    {
      "attributeKey": "AverageFicoScore",
      "attributeValue": "700"
    },
    {
      "attributeKey": "OtherData",
      "attributeValue": "Some value"
    }
  ]
}

另一种选择是使用Pull功能。它允许您迭代接收条目的对象

如果你有这个输入

{
  "creditmaster": {
    "metadata": {
      "AverageFicoScore": "700",
      "OtherData": "Some value"
    }
  }
}
随着这种转变

{
  creditmasterMetaData:
    payload.creditmaster.metadata pluck ((value, key, index) -> 
      {
        attributeKey: key,
        attributeValue: value
      }
    )
}
你得到这个输出

{
  "creditmasterMetaData": [
    {
      "attributeKey": "AverageFicoScore",
      "attributeValue": "700"
    },
    {
      "attributeKey": "OtherData",
      "attributeValue": "Some value"
    }
  ]
}

此脚本是通用的,因为它不在乎键的哪些部分,它只按第一个点之前的第一个元素和最后一个点之后的键名进行分组,它忽略中间的所有内容:

%dw 2.3
output application/java
import * from dw::core::Strings

fun mapProperties(props) = 
    entriesOf(props) // since Mule 4.3 / DW 2.3
        filter (substringAfter($.key, ".") startsWith "metadata.") // to filter keys with .metadata.
        groupBy ((item, index) -> substringBefore(item.key, ".")) 
        mapObject ((value, key, index) ->  
            (key): value map {
                attributeKey: substringAfterLast($.key, "."),
                attributeValue: if (isInteger($.value)) $.value as Number else $.value
            }
        )
---
mapProperties(payload)
输入文件:

creditmaster.metadata.AverageFicoScore= 700
other.a.b= 123
creditmaster.a.b.c=xyz
something.metadata.another.maximum=456
creditmaster.metadata.different.minimum=500
为清晰起见,以JSON格式输出:

{
  "something": [
    {
      "attributeKey": "maximum",
      "attributeValue": "456"
    }
  ],
  "creditmaster": [
    {
      "attributeKey": "minimum",
      "attributeValue": "500"
    },
    {
      "attributeKey": "AverageFicoScore",
      "attributeValue": "700"
    }
  ]
}

此脚本是通用的,因为它不在乎键的哪些部分,它只按第一个点之前的第一个元素和最后一个点之后的键名进行分组,它忽略中间的所有内容:

%dw 2.3
output application/java
import * from dw::core::Strings

fun mapProperties(props) = 
    entriesOf(props) // since Mule 4.3 / DW 2.3
        filter (substringAfter($.key, ".") startsWith "metadata.") // to filter keys with .metadata.
        groupBy ((item, index) -> substringBefore(item.key, ".")) 
        mapObject ((value, key, index) ->  
            (key): value map {
                attributeKey: substringAfterLast($.key, "."),
                attributeValue: if (isInteger($.value)) $.value as Number else $.value
            }
        )
---
mapProperties(payload)
输入文件:

creditmaster.metadata.AverageFicoScore= 700
other.a.b= 123
creditmaster.a.b.c=xyz
something.metadata.another.maximum=456
creditmaster.metadata.different.minimum=500
为清晰起见,以JSON格式输出:

{
  "something": [
    {
      "attributeKey": "maximum",
      "attributeValue": "456"
    }
  ],
  "creditmaster": [
    {
      "attributeKey": "minimum",
      "attributeValue": "500"
    },
    {
      "attributeKey": "AverageFicoScore",
      "attributeValue": "700"
    }
  ]
}


请提供此转换需要应用的逻辑的更多详细信息。那是唯一可能的财产吗?我想不会,或者你不会要求用一般的方式。如果有其他属性,会发生什么?是否每个属性都有.metadata。在中间?CuffigMist.Mealth.ValueFeFiCaseCype=700从属性文件中获取这一点,并且有很多属性。但信贷师很常见@ALEDW被忽略的条目的标准是什么?您应该提前提供所有这些细节,因为我们无法猜测它们。请提供此转换需要应用的逻辑的更多细节。那是唯一可能的财产吗?我想不会,或者你不会要求用一般的方式。如果有其他属性,会发生什么?是否每个属性都有.metadata。在中间?CuffigMist.Mealth.ValueFeFiCaseCype=700从属性文件中获取这一点,并且有很多属性。但信贷师很常见@ALEDW被忽略的条目的标准是什么?您应该提前提供所有这些详细信息,因为我们无法猜测它们。我还必须动态生成这部分creditmasterMetaData,如何做???/属性文件中有多个属性,creditmaster是通用的,其余的则不同,我必须转换json对象中的属性,正如您在输出中提到的那样。如何为它编写通用代码??Hi Hassan。结构是有不同的层次,还是总是一个固定的数字?在这种情况下,会有两个:信用和元数据。结构可以是不同的级别,如-creditmaster.bms.upfront.saopUrl,在所有结构中,creditmaster部分是通用的。我还必须动态生成此部分creditmasterMetaData,如何做???/属性文件中有多个属性,creditmaster很常见,其余的则不同,我必须转换json对象中的属性,正如您在输出中提到的那样。如何为它编写通用代码??Hi Hassan。结构是有不同的层次,还是总是一个固定的数字?在这种情况下,将有两个:credit和metadata。结构可以是不同的级别,如所有结构中的-creditmaster.bms.upfront.saopUrl creditmaster部分是通用的。当我传递有效负载时,获取错误-预期对象,但传递有效负载creditmaster.metadata.AverageFicoStore=700中的二进制数据是来自属性文件,我在函数中传递这个有效载荷。但是上面提到了错误。您如何将属性文件读入有效负载?我为.metadata添加了一个过滤器。在键和输入输出示例中演示它如何为我工作。我通过HTTP将文件发送到HTTP侦听器。您必须设置DataWeave希望识别格式为application/x-java-properties的MIME内容类型。我正在使用Mule中的read file组件读取属性文件,并使用有效负载进行进一步处理。当我传递有效负载时,获取错误-预期对象,但传递有效负载中的BinaryIncreditmaster.metadata.AverageFicoScore=700是来自属性文件的数据,我正在函数中传递此有效负载。但是上面提到了错误。您如何将属性文件读入有效负载?我为.metadata添加了一个过滤器。在键和输入输出示例中演示它如何为我工作。我通过HTTP将文件发送到HTTP侦听器。您必须设置DataWeave希望识别格式为application/x-java-properties的MIME内容类型。我正在使用Mule中的read file组件读取属性文件,并使用负载进行进一步处理。