获取json文件的值

时间:2015-07-31 21:31:35

标签: json vb.net

我在vb net中创建一个应用程序,并读取JSON格式文件。 我知道怎么做,但我有一个不同格式的文件,你可以在这里看到:

{
  "objects": {
    "realms/lang/de_DE.lang": {
      "hash": "729b2c09d5c588787b23127eeda2730f9c039194",
      "size": 7784
    },
    "realms/lang/cy_GB.lang": {
      "hash": "7b52463b2df4685d2d82c5d257fd5ec79843d618",
      "size": 7688
    },
    "minecraft/sounds/mob/blaze/breathe4.ogg": {
      "hash": "78d544a240d627005aaef6033fd646eafc66fe7a",
      "size": 22054
    },
    "minecraft/sounds/dig/sand4.ogg": {
      "hash": "37afa06f97d58767a1cd1382386db878be1532dd",
      "size": 5491
    }
  }
}

它是不同的,因为所有文本都有对象,没有字符串,所以我无法读取它定义的类。 我只需要“hash”的值,然后将它们添加到文本框中。 我希望你能帮助我。

2 个答案:

答案 0 :(得分:1)

听起来像@Plutonix之前已经看过这个,所以我会选择Minecraft的东西。似乎objectsDictionary(Of String, MinecraftItem)。对链接副本进行一些调整可能是为整个文件创建一个类,因此您不必单独提取objects

Public Class MinecraftData
    Public Property Objects As Dictionary(Of String, MinecraftItem)
End Class

Public Class MinecraftItem
    Public Property Hash As String
    Public Property Size As Long
End Class

然后你可以使用Json.NET解析整个事情:

Dim data = JsonConvert.DeserializeObject(Of MinecraftData)(json)

答案 1 :(得分:0)

如果您某些 只需要哈希,您实际上可以使用正则表达式来获取此文件中的所有哈希值。是的,这有点恶,因为正则表达式通常不适合处理结构化数据。但如果你不关心结构...

Dim hashExtractor = new System.Text.RegularExpressions.Regex("[0-9a-f]{40}")
Dim matches = hashExtractor.Matches(myFileContents).Cast(of System.Text.RegularExpressions.Match)
Dim hashes = matches.Select(Function(m) m.Value).ToList()