【问题标题】:How do I get values as strings from a specific key in a JSON key-value pair in VB.net?如何从 VB.net 中的 JSON 键值对中的特定键获取值作为字符串?
【发布时间】:2020-01-20 19:05:25
【问题描述】:

我从 API HTTP GET 请求中得到一个 JSON 文件(大约 1300 行)。这是一个小例子摘录:

{
      "platformId": 3,
      "platformName": "pc",
      "platformNameLong": "PC"
}

我使用这些数据并将其转换为对象(Source 是 API 请求的结果):

Imports Newtonsoft.Json

,

Dim Data As New Statistics
    Data = JsonConvert.DeserializeObject(Of Statistics)(source)

Public Class Statistics
    Public Property platformId As Integer
    Public Property platformName As String
    Public Property platformNameLong As String
End Class

它可以工作,让我稍后在以下示例中使用此对象链接。

Label1.Content = Data.platformNameLong

我现在得到了一个这样的 JSON 部分:

{
 "lifeTimeStats": [
    {
      "key": "Score",
      "value": "7,919,327"
    },
    {
      "key": "Matches Played",
      "value": "20105"
    ]
}

我如何能够将 特定键(在 JSON 的 值-键对部分)中的值获取到我的对象中 (或作为字符串值)?

注意:JSON 中的一些标签与 value-key 部分中的键名相同;有什么方法可以获取“lifeTimeStats”中键的值吗?

示例:如果我想获取“key”:“Matches Played”的“value”,在本例中为“20105”,该怎么办?

【问题讨论】:

  • YourSomething = Jobject.Parse(YourJSON)("platformId") 你得到一个 3
  • @CruleD 但这也适用于键值 JSON 部分吗?
  • @Jul79 您能否使用示例输入密钥和预期输出更新您的帖子,以便我们提供有效的答案。
  • 然后你用 ("lifeTimeStats")(x)("key") 和 ("lifeTimeStats")(x)("value") 来做,其中 xi 是数组的索引。跨度>
  • @sam Done: "如果我想获得 "key": "Matches Played" 的 "value",在本例中为 "20105",该怎么办?"

标签: .net json vb.net visual-studio key-value


【解决方案1】:

类似下面的工作(请用您的 json 变量替换 serializedJsonString):

选项#1:

Dim jsonObject As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(serializedJsonString)
    Dim jsonArray As JArray = jsonObject("lifeTimeStats")                   

    If jsonArray IsNot Nothing Then

        For Each o As JObject In jsonArray.Children(Of JObject)()
            If o("key").ToString() <> key Then Continue For
            Console.WriteLine(o("value").ToString())
            Exit For
        Next
    End If

选项#2:使用前面提到的 SelectToken here

Dim jsonObject As Newtonsoft.Json.Linq.JObject = Newtonsoft.Json.Linq.JObject.Parse(serializedJsonString)
Dim jsonArray As JArray = jsonObject("lifeTimeStats")                   

If jsonArray IsNot Nothing Then

    For Each item As JObject In jsonArray
        If item.SelectToken("key").ToString <> key Then Continue For
        Console.WriteLine(item.SelectToken("value").ToString)
        Exit For            
     Next
End If

【讨论】:

    猜你喜欢
    • 2022-07-07
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2021-02-04
    • 2019-04-11
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多