从JSON中获取所有值

从JSON中获取所有值,json,vb.net,Json,Vb.net,我试图找出如何尽可能高效地从一些JSON中只获取值 我使用的JSON源代码如下: { "_links": {}, "chatter_count": 2, "chatters": { "moderators": [ "user1" ], "staff": [ "user2" ], "admins": [ "user3" ], "global_mods": [ "user4"

我试图找出如何尽可能高效地从一些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
只需对我声明的每个类别/主题进行简单的更改

另一种我只是偶然发现的方式,当我随意弄乱代码时,是这样的:

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之间画一个平行线,以帮助我理解它


提前谢谢

我希望这会对你有所帮助

在您的主窗体上,将以下内容放在顶部:

Imports Newtonsoft.Json
您可以从此处下载此dll并将其添加到引用中:

在创建包含Json中所有对象的简单类之后,将其粘贴到主窗体上:

#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
您可以添加更多对象,具体取决于您的Json

要从Json链接获取数据,请使用以下命令:

  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
您可以在主应用程序上设置TextBox1.Visible=False以隐藏Json
已从链接加载数据。

是否只是试图从值中提取字符串?在C语言中,你可以做一些类似于JObject.Parsejson1.Selecti=>i.Value.Cast i.Children.Cast.Cast的事情,这将产生一个IEnumerable{user1,user2,user3,user4,user5}我不知道如何把它翻译成vb