Get JSON object

(Requires Newtonsoft Nuget package)

Shared Function funGetJSON(sURL As String) As JObject
        Dim request As HttpWebRequest
        Dim response As HttpWebResponse = Nothing
        Dim reader As StreamReader

        request = DirectCast(WebRequest.Create(sURL), HttpWebRequest)

        response = DirectCast(request.GetResponse(), HttpWebResponse)
        reader = New StreamReader(response.GetResponseStream())

        Dim rawresp As String = ""

        rawresp = reader.ReadToEnd()
        'Try
        'Console.WriteLine(rawresp)
        Dim jsonObject As JObject = JObject.Parse(rawresp)
        'Dim jsonArray As JArray = jsonObject(rawresp).ToArray

        Return jsonObject

        Console.WriteLine(jsonObject("ip").ToString)
        'Dim jss As New JavaScriptSerializer()
        'Dim sb As StringBuilder = New StringBuilder()

        ''Serialize  user into JSON format
        'jss.Serialize(rawresp, sb)

        'Dim dict As Dictionary(Of String, String) = jss.Deserialize(Of Dictionary(Of String, String))(sb)
        'Return dict
        ''Catch ex As Exception
        ''Console.WriteLine(ex.Message.ToString)
        '' End Try
        'Return Nothing
        'textbox2.text = JObject.Parse(rawresp)("id")
    End Function

Get specific JSON stanzas for entries and return a Dictionary

    Shared Function GetIPinfo(sIP As String, Optional sFilter As String = "ip;continent_name;country_code;country_name;region_code;region_name;city;zip;location.country_flag", Optional bDumpAll As Boolean = False) As Dictionary(Of String, String)

        Dim ip As IPAddress

        Dim is_valid As Boolean = IPAddress.TryParse(sIP, ip)

        Dim dReturn As New Dictionary(Of String, String)

        If Not is_valid Then Return Nothing

        Dim dict As JObject
        dict = funGetJSON("http://api.ipstack.com/" & sIP & "?access_key=f89e5c9e70024d6b959f151c09b4d854")
        'Dim lvsubitem As ListViewItem.ListViewSubItem = lvItem.SubItems.Add(dict("country_name"))

        If bDumpAll Then
            Console.WriteLine(dict)
            Return Nothing

        End If

        Dim jArrayLocation As New JObject
        For Each sField As String In Split(sFilter, ";")
            If InStr(sField, ".") > 0 Then
                jArrayLocation = dict(Split(sField, ".")(0))
                dReturn.Add(Split(sField, ".")(1), jArrayLocation(Split(sField, ".")(1)))

            Else
                dReturn.Add(sField, dict(sField))

            End If
        Next
        'jArrayLocation = dict("location")
        'If bDumpAll Then Console.WriteLine(dict)
        '
        Return dReturn ' dict("country_name")

        'If Len(dict("country_code")) > 0 Then
        '    'images.Images.Add(dict("country_code"), LoadImage(dict(("country_code"))))

        '    'listIPs.Columns(0).DisplayIndex = 2
        '    'as,do,in,is,me,to
        '    'If dict("country_code") = "AS" Or dict("country_code") = "DO" Or dict("country_code") = "IN" Or dict("country_code") = "IS" Or dict("country_code") = "ME" Or dict("country_code") = "TO" Then
    End Function

Example, even with a JSON array

        If Len(txtIP.Text) > 0 Then
            'if valid_IP(txtIP.text) then
            Dim ip As IPAddress
            Dim is_valid As Boolean = IPAddress.TryParse(txtIP.Text, ip)

            If Not is_valid Then
                MsgBox("Invalid IP")
                Return
            End If

            ClearAll()

            Dim dict As JObject
            dict = funGetJSON("http://api.ipstack.com/" & txtIP.Text & "?access_key=f89e5c9e70024d6b959f151c09b4d854")

            Application.DoEvents()
            lblContinent.Text = dict("continent_name")
            lblCountry.Text = dict("country_name")
            lblRegionCode.Text = dict("region_code")
            lblRegionName.Text = dict("region_name")
            lblCity.Text = dict("city")
            lblZip.Text = dict("zip")
            lblLatitude.Text = dict("latitude")
            lblLongitude.Text = dict("longitude")


            Dim jArrayLocation As New JObject
            jArrayLocation = dict("location")

            lblGeoName.Text = jArrayLocation("geoname_id")
            lblCapital.Text = jArrayLocation("capital")
            lblIsEU.Text = jArrayLocation("is_eu")
            'WebBrowser1.Url = dict("country_flag")
            WebBrowser1.Navigate(New Uri(jArrayLocation("country_flag")))

            For Each oLanguage As JObject In jArrayLocation("languages")
                Dim lvItem As ListViewItem
                lvItem = lstlanguages.Items.Add(oLanguage("code"))
                lvItem.SubItems.Add(oLanguage("name"))
                lvItem.SubItems.Add(oLanguage("native"))
            Next

            jArrayLocation = dict("time_zone")
            lblTimeZone.Text = jArrayLocation("id")
            lblTimeZoneCode.Text = jArrayLocation("code")
            lblDST.Text = jArrayLocation("is_daylight_saving")

            jArrayLocation = dict("connection")
            lblAsn.Text = jArrayLocation("asn")
            lblISP.Text = jArrayLocation("isp")

            'end if
        End If
    End Sub