基本上我试图做的是制作一个程序,列出传说联盟的游戏信息..使用API提取数据。这是如何工作的你搜索用户名并返回一个链接到该帐户的整数,然后使用该整数搜索该帐户的所有信息,EG帐户级别,胜利,损失等。 我遇到了一个我似乎无法弄清楚的问题..请注意,我不是Json.net的新手所以对使用它有一点经验..以下是如何找到用户ID的搜索,第一部分是用户名减号名称中的任何空格下一个是ID,这是我需要的信息。
{"chucknoland":{"id":273746,"name":"Chuck Noland","profileIconId":662,"summonerLevel":30,"revisionDate":1434821021000}}
我必须声明变量是错误的,以便获取数据,因为我所做的一切都返回为0.
这些是以下类,我必须将ID存储在
中 Public Class ID
Public Shared id As Integer
Public Shared name As String
End Class
查看此处看到的前一个示例Simple working Example of json.net in VB.net
他们能够通过制作一个包含其中所有内容的容器类来解决这个问题。我的问题是我寻求的数据总是在改变..第一组总是与“Chucknoland”不同,它显示在例如..有人能够解释我如何提取这些信息吗?
请注意,变量rRegion具有其中的服务器的值,Chuck Noland在OCE上,sSearch是用户名。由于API密钥问题,我不得不从代码中删除API密钥...但是URL返回Json提供。
'URL string used to grab Summoner ID
jUrlData = "https://oce.api.pvp.net/api/lol/" + rRegion + "/v1.4/summoner/by-name/" + sSearch +
' Create a request for URL Data.
Dim jsonRequest As WebRequest = WebRequest.Create(jUrlData)
'request a response from the webpage
Dim jsonResponse As HttpWebResponse = CType(jsonRequest.GetResponse(), HttpWebResponse)
'Get Data from requested URL
Dim jsonStream As Stream = jsonResponse.GetResponseStream()
'Read Steam for easy access
Dim jsonReader As New StreamReader(jsonStream)
'Read Content
Dim jsonResponseURL As String = jsonReader.ReadToEnd()
jUrlString = jsonResponseURL
这是我必须获取信息的请求,这是我试图用来显示该json的ID的代码。
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim obj As ID
obj = JsonConvert.DeserializeObject(Of ID)(jUrlString)
MsgBox(obj.id)
End Sub
有人能够解释我如何才能让它发挥作用吗?
答案 0 :(得分:1)
处理此问题的一种方法是将项目放入字典中,其中键是属性名称。
除非您只想要name
和id
而不是其他信息,否则您所拥有的课程并不完全正确。但是使用字典你无论如何都不需要它。 “技巧”是跳过第一部分,因为你不知道名字。我可以想到两种方法,但可能有更多/更好的方法。
由于json使用了相当多的字符串键,因此创建一个Dictionary,然后从中获取实际项目的数据:
jstr = ... from whereever
' create a dictionary
Dim jResp = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(jstr)
' get the first/only value item
Dim jobj = jResp.Values(0) ' only 1 item
' if you end up needing the name/key:
'Dim key As String = jResp.Keys(0)
' deserialize first item to dictionary
Dim myItem = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(jobj.ToString)
' view results
For Each kvp As KeyValuePair(Of String, Object) In myItem
Console.WriteLine("k: {0} v: {1}", kvp.Key, kvp.Value.ToString)
Next
输出:
k:id v:273746
k:名字v:Chuck Noland
k:profileIconId v:662
k:召唤者等级v:30
k:revisionDate v:1434821021000
使用String, String
也可以,但它会将数字转换为字符串(30
变为"30"
),这通常是不受欢迎的。
在探索时我找到了另一种获取对象数据的方法,但我不确定这是不是一个好主意:
' parse to JObject
Dim js As JObject = JObject.Parse(jstr)
' 1 = first item; 2+ will be individual props
Dim jT As JToken = js.Descendants(1)
' parse the token to String/Object pairs
Dim myItem = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(jT.ToString)
相同的结果。