【问题标题】:asp.net json.net parse resultsasp.net json.net 解析结果
【发布时间】:2014-06-13 21:37:28
【问题描述】:

我不熟悉 JSON 数据解析。到目前为止,这是我通过网络研究得出的结论: 要解析的数据: https://api.twitch.tv/kraken/streams/

我正在尝试使用 JSON.NET/VB.NET 框架来做到这一点:

Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

'(inside a function)
Dim json As JObject = JObject.Parse("https://api.twitch.tv/kraken/streams/")
strResult As String = json.SelectToken("streams").SelectToken("game")

它向我返回了一条错误消息,我确定我的结构不正确。我怎样才能使这项工作?之后,我想遍历返回数组的结果。

谢谢,

【问题讨论】:

    标签: asp.net vb.net json.net


    【解决方案1】:

    这应该让你开始(只是一个概念性的例子 - 控制台,而不是 asp.net):

    Dim json As JObject = _
        JObject.Parse(New WebClient().DownloadString("https://api.twitch.tv/kraken/streams/"))
    
    If json IsNot Nothing AndAlso json.HasValues Then
    
       If json.SelectTokens("streams") IsNot Nothing _
          AndAlso json.SelectTokens("streams").Children().Any() Then
    
          Dim games() As JToken = json.SelectTokens("streams").Children().ToArray()
    
          For Each child As JToken In games
    
              Console.WriteLine("game title: {0} game id: {1} for mature audience? {2}", _
                                          child.Item("game"), child.Item("_id"), child.Item("channel").Item("mature"))
              Console.WriteLine()
          Next
    
          Console.ReadLine()
       End If
    
    End If
    

    第……

    【讨论】:

    • 酷...谢谢...这对我很有帮助。我已经为新手(比如我自己)修改了一些代码,只是为了清楚一点: For Each child As JToken In games lblMensagemSucesso.Text &= "game=" & child.Item("game").ToString () & "
      " lblMensagemSucesso.Text &= "channel.views=" & child.Item("channel").Item("followers").ToString() & "
      " lblMensagemSucesso.Text &= "channel._links.teams=" & child.Item("channel").Item("_links").Item("teams").ToString() & "
      " 下一个
    【解决方案2】:

    这是在 EdSF 的帮助下为 json 中的新手(比如我自己)简化的代码:

        Dim apiURL As String = "https://api.twitch.tv/kraken/streams?limit=10&offset=0"
        Dim json As JObject = JObject.Parse(New WebClient().DownloadString(apiURL))
    
        If json IsNot Nothing AndAlso json.HasValues Then
    
            If json.SelectTokens("streams") IsNot Nothing AndAlso json.SelectTokens("streams").Children().Any() Then
    
                Dim games() As JToken = json.SelectTokens("streams").Children().ToArray()
    
                For Each child As JToken In games
    
                    'Console.WriteLine("game title: {0} game id: {1} for mature audience? {2}", child.Item("game"), child.Item("_id"), child.Item("channel").Item("mature"))
                    'Console.WriteLine()
    
                    lblMensagemSucesso.Text &= "_id=" & child.Item("_id").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "game=" & child.Item("game").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "viewers=" & child.Item("viewers").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "preview=" & child.Item("preview").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "preview.small=" & child.Item("preview").Item("small").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "<img src='" & child.Item("preview").Item("small").ToString() & "'/><br>"
                    lblMensagemSucesso.Text &= "_links.self=" & child.Item("_links").Item("self").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "channel.status=" & child.Item("channel").Item("status").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "channel.logo=" & child.Item("channel").Item("logo").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "<img src='" & child.Item("channel").Item("logo").ToString() & "'/><br>"
                    lblMensagemSucesso.Text &= "channel.video_banner=" & child.Item("channel").Item("video_banner").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "channel.url=" & child.Item("channel").Item("url").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "channel.views=" & child.Item("channel").Item("followers").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "channel._links.self=" & child.Item("channel").Item("_links").Item("self").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "channel._links.teams=" & child.Item("channel").Item("_links").Item("teams").ToString() & "<br>"
                    lblMensagemSucesso.Text &= "<br>"
    
                Next
    
                'Console.ReadLine()
            End If
    
        End If
    

    【讨论】:

    • 与其连接字符串并为每一行更新 UI,不如使用 StringBuilder 构造字符串并在最后只更新一次 UI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2015-09-15
    相关资源
    最近更新 更多