如何获得JSON对象的名称使用?(c# Newtonsoft.JSON)
本文关键字:JSON Newtonsoft 对象 何获得 | 更新日期: 2023-09-27 18:08:50
对于那些熟悉Minecraft的人来说,1.8更新将声音存储为一个以加密散列作为名称的文件(您可以将扩展名更改为。ogg来播放)。在assets文件夹中有一个以JSON文件形式存储的索引,该索引显示每个文件的正确发音,并带有加密的散列名称。
我正在尝试创建一个程序,用户键入名称,它将找到包含该名称的声音。索引以这种方式存储:
{ "objects":{"minecraft/sounds/mob/wither/idle2.ogg": {
"hash": "6b2f86a35a3cd88320b55c029d77659915f83239",
"size": 19332
},
"minecraft/lang/fil_PH.lang": {
"hash": "e2c8f26c91005a795c08344d601b10c84936e89d",
"size": 74035
},
"minecraft/sounds/note/snare.ogg": {
"hash": "6967f0af60f480e81d32f1f8e5f88ccafec3a40c",
"size": 3969
},
"minecraft/sounds/mob/villager/idle1.ogg": {
"hash": "a772db3c8ac37dfeb3a761854fb96297257930ab",
"size": 8605
},
"minecraft/sounds/mob/wither/hurt3.ogg": {
"hash": "a4cf4ebe4c475cd6a4852d6b4228a4b64cf5cb00",
"size": 16731
}
例如,如果用户输入wither,它将获取"minecraft/sounds/mob/wither/idle2.ogg"的哈希值。和"minecraft/声音/暴徒/枯萎/hurt3.ogg"
我的问题是,我如何获得对象名称(名称,而不是属性)来与用户的关键字字符串进行比较。
对不起,如果我没有使用适当的术语对某些词,我不修补JSON文件太多。根据需要纠正我的术语
编辑
这个答案很好地解决了这个问题(没有动态):
https://stackoverflow.com/a/32129497/563532原始答:
如此:
var obj = JsonConvert.DeserializeObject<dynamic>(@"{ ""objects"":{""minecraft/sounds/mob/wither/idle2.ogg"": {
""hash"": ""6b2f86a35a3cd88320b55c029d77659915f83239"",
""size"": 19332
},
""minecraft/lang/fil_PH.lang"": {
""hash"": ""e2c8f26c91005a795c08344d601b10c84936e89d"",
""size"": 74035
},
""minecraft/sounds/note/snare.ogg"": {
""hash"": ""6967f0af60f480e81d32f1f8e5f88ccafec3a40c"",
""size"": 3969
},
""minecraft/sounds/mob/villager/idle1.ogg"": {
""hash"": ""a772db3c8ac37dfeb3a761854fb96297257930ab"",
""size"": 8605
},
""minecraft/sounds/mob/wither/hurt3.ogg"": {
""hash"": ""a4cf4ebe4c475cd6a4852d6b4228a4b64cf5cb00"",
""size"": 16731
}
}
}");
var t = obj.objects;
var names = new HashSet<String>();
foreach(JProperty fileThing in t)
{
names.Add(fileThing.Name);
}
names.Dump();
给:
minecraft/声音/暴徒/枯萎idle2.ogg
minecraft/lang/fil_PH.lang
minecraft/声音/注意/snare.ogg
minecraft/声音/暴徒/村民/idle1.ogg
minecraft/声音/暴徒//hurt3掉落。ogg
你也可以这样做:
var t = obj.objects;
var names = new Dictionary<String, String>();
foreach(JProperty fileThing in t)
{
names.Add(fileThing.Name, (string)t[fileThing.Name].hash);
}
给你一个字典,将原始名称链接到哈希:
minecraft/声音/暴徒//idle2掉落。Ogg -> 6b2f86a35a3cd88320b55c029d77659915f83239minecraft/lang/fil_PH。Lang -> e2c8f26c91005a795c08344d601b10c84936e89dminecraft/声音/注意/陷阱。Ogg -> 6967f0af60f480e81d32f1f8e5f88ccafec3a40cminecraft/声音/暴徒/村民/idle1。Ogg -> a772db3c8ac37dfeb3a761854fb96297257930abminecraft/声音/暴徒//hurt3掉落。Ogg -> a4cf4ebe4c475cd6a4852d6b4228a4b64cf5cb00
假设您有一个jsonString作为字符串变量
jsonString = ";
JArray array = JArray.Parse(json);
foreach (JObject content in array.Children<JObject>())
{
foreach (JProperty prop in content.Properties())
{
Console.WriteLine(prop.Name);
}
}