2015-05-26 3 views
0

Я пытаюсь выяснить, как получить только значения из некоторого JSON, насколько это возможно.Получение всех значений из 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 Для каждой петли кажется довольно чрезмерным, хотя, и я не могу понять, как сделать его более кратким.

Это не особенно помогает в том, что я не очень хорошо знаком с объектами или терминологией JSON. Я знаком с XML и что у него есть корень, узлы, элементы, атрибуты и т. Д. ..... и я пытался провести параллель между JSON и XML, чтобы помочь мне разобраться,

Заранее спасибо!

+0

Вы просто пытаетесь получить строки из значений? Также вы можете использовать Linq для доступа к элементу данных. – t3dodson

+0

В C# вы можете сделать что-то вроде 'JObject.Parse (json1). Выбрать (i => i.Value) .Cast i.Children) .Cast ().Cast () 'Который дал бы' IEnumerable {"user1", "user2", "user3", "user4", "user5"} 'Я не знаю, как перевести это на vb – t3dodson

ответ

0

Надеюсь, это поможет вам.

На главной форме поставить это на вершине:

Imports Newtonsoft.Json 

Вы можете скачать и добавить этот DLL в вашу ссылку здесь: https://www.nuget.org/packages/newtonsoft.json/

После этого создать простой класс со всеми объектами 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 загруженные данные по ссылке.

Смежные вопросы