使用json.net,如何在嵌入式数组中查询?

时间:2014-04-11 17:50:57

标签: json vb.net json.net

首先,我引用了这个:http://james.newtonking.com/json/help/index.html?topic=html/SelectToken.htm

我正在使用json.net

如果我收到回复以下内容的帖子回复:

{
    "success_count": 1,
    "error_count": 0,
    "data": [
        {
            "status": "example status",
            "member_rating": 42

        }
    ]
}

我已将其存储到名为“as_Read”

的变量中

我可以做以下事情:

Dim as_ReadJobj As JObject = JObject.Parse(as_Read)
Dim as_SuccessCountValue = as_ReadJobj.Property("success_count").Value
Dim as_ErrorCountValue = as_ReadJobj.Property("error_count").Value

我似乎无法理解的是如何查询状态值。

我试过了:

Dim as_SubscribeStatus = as_ReadJobj.SelectToken("data[0].status").Value
Dim as_SubscribeStatus = as_ReadJobj.Property("data")("status").Value

以及其他一些方法。看起来我只是对一些显而易见的东西视而不见,但我是vb.net的新手,刚刚开始使用这个json库。

谢谢!


更新:我明白了。

我接受了答案,因为该解决方案完美无缺。我也想出了我原来的问题。以下作品:

as_SubscribeStatus = as_ReadJobj.SelectToken("data[0].status").ToString

我想我完全不了解SelectToken的内部工作原理。但现在我有两个解决方案。真棒。

1 个答案:

答案 0 :(得分:0)

您可以使用JToken列表来执行此操作并遍历该列表中的项目以提取所需的信息,包括嵌入式阵列。

Dim asRead As String = "{""success_count"": 1,""error_count"": 0,""data"": [{""status"": ""example status"",""member_rating"": 42}]}"

        Dim as_ReadJobj As JObject = JObject.Parse(asRead)

        Dim results As List(Of JToken) = as_ReadJobj.Children().ToList

        Dim as_SuccessCountValue As String
        Dim as_ErrorCountValue As String
        Dim status As String = ""
        Dim member_rating As String = ""

        For Each item As JProperty In results
            item.CreateReader()
            Select Case item.Name
                Case "success_count"
                    as_SuccessCountValue = item.Value.ToString
                Case "error_count"
                    as_ErrorCountValue = item.Value.ToString
                Case "data"
                    For Each subitem As JObject In item.Values
                        status = subitem("status")
                        member_rating = subitem("member_rating")
                    Next
            End Select
        Next

我已经编辑了another question here in SO的代码。我还没有尝试使用.SelectToken,但上面的代码应该符合您提供的要求。

注意:

我已将字符串用于status和member_rating,而它们应该是list of string