2015-03-24 3 views
1

Я понимаю, что вопросы, очень похожие на это, были опубликованы, но файлы JSON все структурированы довольно разные, и хотя я очень новичок в использовании JSON с VB, я бы скорее использовал базы данных, я сделал это несколько раз и то, что я обычно делаю, не работает.Как я могу получить часть этого JSON?

Я получил, чтобы вытащить значения из каждого элемента массива цифр, но как только я получу в нем, я получаю ошибки при попытке использовать image2.Value («id»). Таким образом, единственный способ получить доступ к правильному - это сделать оператор If, говорящий, что если image2.Name = "id" Then If image2.Value() = strFigID Затем сделайте что-нибудь.

Вот часть JSON. Это действительно, это только часть, которую я вытащил, а не весь файл JSON.

"figures":[ 
     { 
      "id":"F001", 
      "title":"Figure 1. Some Figure", 
      "sheets":[ 
       "1047815_01.gif", 
       "1057923_02.gif" 
      ] 
     }, 
     { 
      "id":"F002", 
      "title":"Figure 2. Another Figure", 
      "sheets":[ 
       "f110__2184_00.gif" 
      ] 
     } 
] 

Вот код

If image.Name = "figures" Then 
    Dim testingJArray As JArray = image.Value() 
    For Each ArrayImage In testingJArray 
     Dim jResults2 As JObject = JObject.Parse(ArrayImage.ToString()) 
     Dim imageResults2 As List(Of JToken) = jResults2.Children().ToList() 
     Dim imageForLog2 As String = "" 
     For Each image2 As JProperty In imageResults2 
      imageForLog2 = image2.ToString() 
      If image2.Name = "id" Then 
       If image2.Value().ToString() = strFigID Then 
        ' --------------------------------------------------- 
        ' At this point I am at the correct Array Item 
        ' But now I need to get the array item out of 
        ' the sheets value 
        ' --------------------------------------------------- 
       End If 
      End If 
     Next 
    Next 
End If 

ответ

2

Во-первых, как было отмечено, это недействительно JSON. Вся вещь должна быть завернута в «{...}».

Один из способов получить в данных:

Dim js = JObject.Parse(jstr) 

strGIF = js("figures")(0)("sheets")(0) ' == 1047815_01.gif 

Это может быть проще определить классы для использования:

Public Class Figure 
    Public Property id As String 
    Public Property title As String 
    Public Property sheets As String() 
End Class 

Public Class FigsContainer 
    Public Property figures As Figure() 
End Class 

Для их использования:

Dim figs = JsonConvert.DeserializeObject(Of FigsContainer)(jstr) 

Dim s = figs.figures(0).sheets(0) ' 1047815_01.gif again 

ли классы стоят того или нет, зависит от того, будете ли вы работать с данными или просто нужно одно значение в строке json.

1

Если бы я тебя, я хотел бы попробовать использовать структуру типа для разбора JSON, что-то вроде этого:

public class Figure 
{ 
    public string id { get; set; } 
    public string title { get; set; } 
    public List<string> sheets { get; set; } 
} 

public class RootObject 
{ 
    public List<Figure> figures { get; set; } 
} 

Тогда вы можете просто вызвать JsonConvert.DeserializeObject<Figure>, чтобы получить объекты и использовать LINQ, чтобы найти все, что вам нужно

Кроме того, ваш JSON, похоже, недействительный, ему нужны {} брекеты

+0

Существует больше, я просто вытащил часть «фигуры». Где отсутствуют {}? – xRuhRohx

+0

AFAIR, JSON должен выглядеть так: {"figure": [{...}, {...}]} –

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