我在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”的值,然后将它们添加到文本框中。 我希望你能帮助我。
答案 0 :(得分:1)
听起来像@Plutonix之前已经看过这个,所以我会选择Minecraft的东西。似乎objects
是Dictionary(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()