0

J'utilise la requête Stream Analytics pour filtrer mon objet Complex Json entré.Enveloppe JSON dans la requête Stream Analytics de sortie

Entrée:

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

Voici ma requête:

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 

je reçois quelque chose comme ceci:

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

Je veux envelopper ce tableau JSON dans un objet JSON avec un 'id' unique pour obtenir quelque chose comme ceci:

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

Je ne trouve pas un moyen de le faire. J'ai essayé de créer une troisième sélection qui appelle une fonction définie utilisateur:

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

    return JSON.stringify(out_obj); 
} 

mais cela est appliqué à chaque objet du tableau .. si je reçois ceci:

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

est-il un moyen d'envelopper tous les objets imbriqués dans ce tableau avec une requête?

Répondre

0

Selon vos besoins, j'ai testé cette question, vous pouvez consulter le fragment de code suivant:

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 

Entrée

{ 
    "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" 
     } 
     ] 
    } 
    ] 
} 

Sortie

enter image description here

+0

C'est exactement ce que je voulais, Merci beaucoup Bruce – Sam