How to get the name of a JSON object using? (C# Newtonsoft.JSON)(如何使用获取JSON对象的名称?(C#Newtonsoft.JSON))
问题描述
对于那些熟悉我的世界的人来说,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,它将获取"Minworld/Sound/mob/wither/idle2.ogg"的散列
和
"我的世界/声音/暴徒/衰败/伤害3.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();
给予:
我的世界/声音/暴徒/衰败/idle2.ogg
我的世界/lang/FIL_PH.lang
我的世界/声音/音符/Snare.ogg
我的世界/声音/暴徒/村民/idle1.ogg
我的世界/声音/暴徒/衰败/伤害3.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);
}
这为您提供了一个将原始名称链接到散列的词典:
我的世界/声音/MOB/WIFTER/idle2.ogg->6b2f86a35a3cd88320b55c029d77659915f83239 我的世界/lang/FIL_PH.lang->e2c8f26c91005a795c08344d601b10c84936e89d 我的世界/声音/注解/Snare.ogg->6967f0af60f480e81d32f1f8e5f88cafec3a40c 我的世界/声音/暴徒/村民/idle1.ogg->a772db3c8ac37dfeb3a761854fb96297257930ab 我的世界/声音/mob/wither/hurt3.ogg->a4cf4ebe4c475cd6a4852d6b4228a4b64cf5cb00
这篇关于如何使用获取JSON对象的名称?(C#Newtonsoft.JSON)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用获取JSON对象的名称?(C#Newtonsoft.JSON)
基础教程推荐
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- MS Visual Studio .NET 的替代品 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01