无法访问第二级 JSON 字符串



对于编程学校的项目,我正在制作一个天气应用程序,我需要在其中显示当前温度。在 JSON 字符串中,当前温度处于第二级,我不知道如何访问。将来,我还想访问此字符串中包含的每小时和每日天气预报 - 如果您对如何做到这一点有任何想法。任何帮助将不胜感激。这是我的数据:

{
    "latitude":-    32.9283,
    "longitude":151.7817,
    "timezone":"Australia/Sydney",
    "currently":{
        "time":1546405401,
        "summary":"Clear",
        "icon":"clear-day",
        "precipIntensity":0,
        "precipProbability":0,
        "temperature":93.03,
        "apparentTemperature":93.03,
        "dewPoint":58.07,
        "humidity":0.31,
        "pressure":1009.17,
        "windSpeed":14.77,
        "windGust":19.66,
        "windBearing":68,
        "cloudCover":0,
        "uvIndex":7,
        "visibility":7.75,
        "ozone":276.4
    },
    "hourly":{
        "summary":"Clear throughout the day.",
        "icon":"clear-day",
        "data":[
            {
                "time":1546405200,
                "summary":"Clear",
                "icon":"clear-day",
                "precipIntensity":0,
                "precipProbability":0,
                "temperature":93.25,
                "apparentTemperature":93.25,
                "dewPoint":57.89,
                "humidity":0.31,
                "pressure":1009.18,
                "windSpeed":14.78,
                "windGust":19.53,
                "windBearing":68,
                "cloudCover":0,
                "uvIndex":7,
                "visibility":7.58,
                "ozone":276.43
            },
            {
                "time":1546408800,
                "summary":"Clear",
                "icon":"clear-day",
                "precipIntensity":0,
                "precipProbability":0,
                "temperature":89.44,
                "apparentTemperature":89.44,
                "dewPoint":60.5,
                "humidity":0.38,
                "pressure":1008.99,
                "windSpeed":14.58,
                "windGust":21.84,
                "windBearing":66,
                "cloudCover":0,
                "uvIndex":4,
                "visibility":10,
                "ozone":275.8
            },
            ...

这是我的代码:

Imports System.IO
Imports System.Net
Imports System.Drawing
Imports System.Web.Script.Serialization
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
    Dim request As HttpWebRequest
    Dim response As HttpWebResponse = Nothing
    Dim reader As StreamReader
    request = DirectCast(WebRequest.Create("https://api.darksky.net/forecast/412498ac9648999c8185723817a897d3/-32.9283,151.7817"), HttpWebRequest)
    response = DirectCast(request.GetResponse(), HttpWebResponse)
    reader = New StreamReader(response.GetResponseStream())
    Dim data As String
    data = reader.ReadToEnd()
    Dim jsonObject As JObject = JObject.Parse(data)
    MessageBox.Show(jsonObject.SelectToken("currently").ToString)
    Dim JsonArray As JArray = JArray.Parse(jsonObject.SelectToken("currently").ToString)
    MessageBox.Show(jsonObject.SelectToken("temperature").ToString)

错误信息:

Newtonsoft.Json.JsonReaderException: '从 JsonReader 读取 JArray 时出错。当前 JsonReader 项不是一个数组:StartObject。路径",第 1 行,位置 1"。

就像错误说"currently"不是一个数组,它是一个对象。数组使用方括号表示[]而对象使用大括号{}

试试这个:

Dim currentlyObject As JObject = DirectCast(jsonObject("currently"), JObject)
'Example usage.
MessageBox.Show(currentlyObject("temperature"))

最新更新