我正试图弄清楚如何尽可能有效地从某些JSON中获取值。
我使用的JSON源是:
{
"_links": {},
"chatter_count": 2,
"chatters": {
"moderators": [
"user1"
],
"staff": [
"user2"
],
"admins": [
"user3"
],
"global_mods": [
"user4"
],
"viewers": [
"user5"
]
}
}
如上所列,“聊天者”中有版主,职员,管理员,global_mods和观众。
对于每个小子类别(元素?字段?),我想获得每个用户名。
我现在可以使用这种方法获得我想要的东西:
Dim root1 As JObject = JObject.Parse(json1)
Dim chatters1 As JToken = root1("chatters")
Dim viewers1 As JToken = chatters1("viewers")
Dim mods1 As JToken = chatters1("moderators")
For Each person As String In mods1.Children
'do something with person
Next
只是简单地改变我声明的每个类别/ Jtoken的每个。
另一种我偶然发现的方法是因为我随意搞乱代码是这样的:
Dim jResults As JObject = JObject.Parse(json1)
For Each item In jResults
For Each item2 As JProperty In item.Value
For Each item3 As JToken In item2.Children
For Each item4 As String In item3
MessageBox.Show(item4)
Next
Next
Next
Next
我完全得到了我需要的东西,并将其作为测试在消息框中显示。
4 For Each循环似乎相当过分,我无法弄清楚如何使它更简洁。
我对JSON对象或术语不太熟悉并没有特别的帮助。我熟悉XML,它有一个根,节点,元素,属性等......我一直试图在JSON和XML之间画一个并行来帮助我理解它,
提前致谢!
答案 0 :(得分:0)
我希望这会对你有所帮助。
在您的主表单上,将其放在顶部:
var requestUrl = String.format("{0}/_api/web/lists/getByTitle('Images')/rootfolder/files/Add(url='{1}', overwrite=true)", _spPageContextInfo.siteAbsoluteUrl, fileName);
$.ajax({
url: requestUrl,
type: "POST",
data: buffer, //This is the base64 encoded buffer from the above step
processData: false,
headers: {
Accept: "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function(result) {
console.log("Upload complete!");
},
error: function(error) {
console.log("Something went wrong!");
}
});
您可以从此处下载此dll并将其添加到参考文献中: https://www.nuget.org/packages/newtonsoft.json/
然后在Json中创建包含所有对象的简单类,将其粘贴到主窗体上:
Imports Newtonsoft.Json
您可以添加更多对象,具体取决于您的Json。
从Json Link获取数据使用:
#Region " - Classes - "
Public Class JSON_result
Public _links As String
Public chatter_count As Integer
Public chatters As String
Public moderators As String
Public staff As String
Public admins As String
Public global_mods As String
Public viewers As String
End Class
#End Region
之后,最后一个是加载并将数据和值显示到文本框中:
Private Sub GetJsonData()
Try
Dim wc As WebClient = New WebClient
Dim jsonlink As String = "http://yourJsonlink.com/data.txt"
Dim jsondata As String
jsondata = wc.DownloadString(jsonlink)
TextBox1.Text = jsondata.ToString
Catch ex As Exception
End Try
End Sub
您可以在主应用上制作 Private Sub LoadDataToTextBoxes()
Try
Dim obj As JSON_result
obj = JsonConvert.DeserializeObject(Of JSON_result)(Me.TexTbox1.Text)
_linksTXT = obj._links
chatter_countTXT = obj.chatter_count
chattersTXT = obj.chatters
moderatorsTXT = obj.moderators
staffTXT = obj.staff
adminsTXT = obj.admins
global_modsTXT = obj.global_mods
viewersTXT = obj.viewers
Catch ex As Exception
End Try
End Sub
,以隐藏Json
从链接加载数据。