如何使用获取JSON对象的名称?(C#Newtonsoft.JSON)

How to get the name of a JSON object using? (C# Newtonsoft.JSON)(如何使用获取JSON对象的名称?(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)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)