【问题标题】:Retrieve index of JSON array from从以下位置检索 JSON 数组的索引
【发布时间】:2018-01-04 20:28:51
【问题描述】:

我有一个标准 JSON 数组返回给我,我已使用 JsonConvert 对其进行反序列化,下面是我的情况的简化代表:

[
  {
    "name": "John",
    "age": "21",
    },
  {
    "name": "Sally",
    "age": "18",
   },
 {
    "name": "Harry",
    "age": "25",
   }
]

...

Public Class myExample
  Public Property name as String
  Public Property age as Integer
End Class

...

Dim serverResponse as string = reader.ReadToEnd()
Dim jsonResult = JsonConvert.DeserializeObject(Of List(Of myExample))(serverResponse)

在给定项目索引的情况下,我可以轻松检索姓名或年龄的值,例如,

Dim someValue = jsonResult.Item(1).name ' returns Sally
Dim someOther = jsonResult.Item(1).age  ' returns 18

但我希望返回给定名称的数组的索引(整数):即,我如何搜索 Sally 并检索项目索引整数(在本例中为 1),或者在 John 的情况下,返回 0 ?我无法使用 jsonResult.IndexOf() 或 jsonResult.FindIndex() 来实现这一点,并且搜索没有结果。

我有一个广泛的 JSON,并希望遍历 dataGridViewer 列上的名称,将所有名称的年龄返回到另一列。

感谢您帮助新手!

【问题讨论】:

  • 在该代码中,jsonResult 将成为List(of T),将其命名为 JSON 会使事情变得混乱,因为它不再是 JSON,而是常见的普通 NET 对象集合。您应该能够将该列表用作数据源并在那里查看您的所有数据
  • 没错。 jsonResult.First(Function(x) x.name = "John") 将在列表中找到第一个匹配项,但这只是一个标准的 LINQ 搜索,与 JSON 无关。如果您需要在反序列化之前在 JSON 字符串中找到该项目,那是一回事,但是一旦您反序列化它,它就不再是 JSON,它只是一个普通的 .NET 列表。
  • 是的,这也行。它只是一个列表,因此任何在列表中查找项目的方法都可以使用。给猫剥皮的方法有很多。 :)
  • 既然你明白了,为什么不继续为你的问题添加你自己的答案。
  • 请注意,您不必循环显示 DGV 中 2 列中的数据 - myDGV,DataSource = jsonResult 会为您完成

标签: json vb.net serialization


【解决方案1】:

由于这种方式反序列化的结果是List(of T),所以可以通过上面的例子找到索引,例如:

jsonResult.FindIndex((Function(s) s.name.Equals(someNameToCheck)))) 

或任何其他在列表中查找项目的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多