从JSON中获取所有值

时间:2015-05-26 22:45:08

标签: json vb.net

我正试图弄清楚如何尽可能有效地从某些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之间画一个并行来帮助我理解它,

提前致谢!

1 个答案:

答案 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 从链接加载数据。