如何获取此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

首先,如前所述,这是无效的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字符串中的一个值。

如果我是你,我会尝试使用类型结构来解析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似乎无效,它需要{}大括号

相关内容

  • 没有找到相关文章

最新更新