在Azure流分析中的属性内提取数组

时间:2018-04-14 19:57:16

标签: arrays json azure azure-stream-analytics stream-analytics

到目前为止,我没有运气通过流分析工作从JSON字符串中以宽格式提取某些值。

JSON具有以下格式:

{"devicename":"demo","msgtime":"2018-04-13T11:00:00.0000000Z",
"payload":[{"Sensor":"one","Value":1.817,"Unit":"W"}, 
{"Sensor":"two","Value":0.481,"Unit":"W"}, 
{"Sensor":"three","Value":0.153,"Unit":"W"}]}}

我试图按以下格式获取它:

name    one     two     three

demo    1.817   0.481   0.153

…       …       …       …

我尝试使用" Cross APPLY GetPropertyValues(输入)"来获取值,但我无法以宽幅格式获取它们。

2 个答案:

答案 0 :(得分:2)

有一篇博文描述了您的方案的查询模式: Using Azure Stream Analytics JavaScript UDF to lookup values in JSON array

答案 1 :(得分:-1)

尝试下面的代码

  SELECT
            localInput.devicename,
            udf.getValue('one', localInput.payload) as One,
            udf.getValue('two', localInput.payload) as Two,
            udf.getValue('three', localInput.payload) as Three
        FROM localInput;

  function main(identifier, arr) {
    var result = null;

    if (Object.prototype.toString.call(arr) == "[object Array]") {
        for (i = 0; i < arr.length; i++) {
            if (arr[i].type == identifier) {
                result = arr[i].value;
            }
        }
    }
    return result;
  }