Search code examples
azurestreamazure-stream-analytics

Azure Stream Analitics list in the list


How do I take the data from the file list if json array is in the list? eg.

   {"city":{"id":1851632,"name":"Shuzenji",
"coord":{"lon":138.933334,"lat":34.966671},
"country":"JP",
"cod":"200",
"message":0.0045,
"cnt":38,
"list":[{
        "dt":1406106000,
        "main":{
            "temp":298.77,
            "temp_min":298.77,
            "temp_max":298.774,
            "pressure":1005.93,
            "sea_level":1018.18,
            "grnd_level":1005.93,
            "humidity":87
            "temp_kf":0.26},
        "weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],
        "clouds":{"all":88},
        "wind":{"speed":5.71,"deg":229.501},
        "sys":{"pod":"d"},
        "dt_txt":"2014-07-23 09:00:00"}
        ]}

How do I get to weather.main?


Solution

  • First your JSON format seem to have errors, let's fix these first:

    {"city":{"id":1851632,"name":"Shuzenji"},
    "coord":{"lon":138.933334,"lat":34.966671},
    "country":"JP",
    "cod":"200",
    "message":0.0045,
    "cnt":38,
    "list":[{
            "dt":1406106000,
            "main":{
                "temp":298.77,
                "temp_min":298.77,
                "temp_max":298.774,
                "pressure":1005.93,
                "sea_level":1018.18,
                "grnd_level":1005.93,
                "humidity":87,
                "temp_kf":0.26},
            "weather":[{"id":804,"main":"Clouds","description":"overcast clouds","icon":"04d"}],
            "clouds":{"all":88},
            "wind":{"speed":5.71,"deg":229.501},
            "sys":{"pod":"d"},
            "dt_txt":"2014-07-23 09:00:00"}
            ]},
    

    Note comma after at the end of humidity line, and closed record in the first line after Shuzenji.

    Now, in the JSON example weather.main, is actually list[0].weather[0].main. Here is the way to get precisely this value out of the JSON structure using Array and Record built-in functions:

    SELECT
        -- input.list[0].weather[0].main
        WeatherMain = GetRecordPropertyValue(GetArrayElement(GetRecordPropertyValue(GetArrayElement(input.list, 0), 'weather'), 0), 'main')
    FROM input