簡體   English   中英

將JSON包裝到輸出Stream Analytics查詢中

[英]Wrapping JSON into output Stream Analytics query

我正在使用Stream Analytics查詢來過濾輸入的Complex Json對象。

輸入:

    {
  "id" : "001",
  "firstArray":[
    {
      "tid" : 9,
       "secondArray":[
         {
            "key1" : "value1",
            "key2" : "value2"
         },
         {...}
       ]
     },
     {
      "tid" : 8,
       "secondArray":[
         {
            "key1" : "value1",
            "key2" : "value2"
         },
         {...}
       ]
     }
  ]
}

這是我的查詢:

   WITH T1 AS 
    (
    SELECT 
        FirstArray.ArrayValue.Tid as Tid,
        FirstArray.ArrayValue.secondArray as SecondArray
    FROM
        inputfromeventhub MySource
    OUTER APPLY GetElements(MySource.firstArray) AS FirstArray
    )
SELECT
   T1.Tid as Tid,
   SecondArray.ArrayValue.key1 as key1,
   SecondArray.ArrayValue.key2 as key2
INTO exitstream
OUTER APPLY GetElements(T1.SecondArray) as SecondArray

我得到這樣的東西:

[
 {
  "tid":9,
  "key1": "value1",
  "key2": "value2"
 },
 {
  "tid":8,
  "key1": "value1",
  "key2": "value2"
 }
]

我想將此JSON數組包裝到具有唯一“ id”的JSON對象中,以得到如下所示的內容:

{
 "id":"001",
 "array":[
  {
   "tid":9,
   "key1": "value1",
   "key2": "value2"
  },
  {
   "tid":8,
   "key1": "value1",
   "key2": "value2"
  }
 ]
} 

我找不到辦法。 我嘗試創建調用用戶定義函數的第三個選擇:

function main(obj) {
  var out_obj = {};
  out_obj.id = "001";
  out_obj.array = obj;

  return JSON.stringify(out_obj);
}

但這應用於數組中的每個對象。所以我得到了:

[
  { "myFunction": "{\"id\":\"001\",\"array{\"tid\":9,\"key1\":\"value1\",\"key2\":\"value2\"}"
  },
  { "myFunction": "{\"id\":\"001\",\"array{\"tid\":8,\"key1\":\"value1\",\"key2\":\"value2\"}"
  }
]

有沒有辦法用查詢將所有嵌套對象包裝在該數組中?

根據您的要求,我測試了此問題,您可以參考以下代碼段代碼:

JavaScript UDF

function main(obj) {
  var out_obj = [];
  for(var i=0;i<obj.length;i++){
    var o=obj[i];
    for(var j=0;j<o.secondArray.length;j++){
      o1=o.secondArray[j];
      out_obj.push({tid:o.tid,key1:o1.key1,key2:o1.key2});
    }
  }
  return out_obj;
}

QUERY

SELECT 
    MySource.id,
    udf.aggreate(MySource.firstArray) as array
FROM
    [inputfromeventhub] MySource

輸入

{
  "id" : "001",
  "firstArray":[
    {
      "tid" : 9,
       "secondArray":[
         {
            "key1" : "value01",
            "key2" : "value02"
         },
         {
            "key1" : "value03",
            "key2" : "value04"
         }
       ]
     },
     {
      "tid" : 8,
       "secondArray":[
         {
            "key1" : "value11",
            "key2" : "value12"
         },
         {
            "key1" : "value13",
            "key2" : "value14"
         }
       ]
     }
  ]
}

產量

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM