提问人:Hazeron 提问时间:11/17/2023 更新时间:11/17/2023 访问量:57
在通过 NewtonSoft Linq 遍历该数组之前检索 JSON 对象数组的键/标识符
Retrieving key/identifier of array of JSON objects before iterating through that array via NewtonSoft Linq
问:
有没有一种方法可以在遍历该数组之前检索JSON对象数组的“键”?我正在尝试将每个数组中的值与关联的键相关联,但在使用 NewtonSoft 的 Linq 库解析它时,我无法确定是否使用 JArrays、JObjects 等。
{
"DENSE_FOREST": [
{
"Terrain_Key": "FIELD_GRASS",
"Name" : "Grassy Field"
},
{
}
],
"TEST" : [
]
}
例如,我希望能够获取名称/字符串“DENSE_FOREST”,遍历关联的数组,以便我可以从中提取数据并将其关联到我正在使用的数据结构中的“DENSE_FOREST”下,然后转到“TEST”,依此类推。
我正在尝试将其作为 JArray 进行迭代,但语法让我感到困惑,我在网上找到的示例并不完全适用于我的问题。
答:
1赞
Denis Micheal
11/17/2023
#1
有没有一种方法可以检索JSON对象数组的“键” 在遍历所述数组之前?
您提供的示例字符串是一个,因此您可以先像这样解析它:json
JObject
string jsonData = @"{
""DENSE_FOREST"": [
{
""Terrain_Key"": ""FIELD_GRASS"",
""Name"": ""Grassy Field""
},
{
""Terrain_Key"": ""FOREST"",
""Name"": ""Forest Area""
}
],
""TEST"": []
}";
JObject jsonObject = JObject.Parse(jsonData);
然后继续搜索 A with 键,将其转换为 A 并检索内容。JProperty
DENSE_FOREST
jsonObject
JArray
// Retrieve the specific key "DENSE_FOREST"
JArray denseForestArray = (JArray)jsonObject["DENSE_FOREST"];
// Check if the key exists and is an array
if (denseForestArray != null && denseForestArray.Type == JTokenType.Array)
{
// Process the items in "DENSE_FOREST" array
foreach (JObject item in denseForestArray)
{
string terrainKey = item.Value<string>("Terrain_Key");
string name = item.Value<string>("Name");
Console.WriteLine("Terrain_Key: " + terrainKey + ", Name: " + name);
}
}
else
{
Console.WriteLine("Key 'DENSE_FOREST' does not exist or is not an array.");
}
您还可以测试小提琴。
编辑
要遍历 中的所有项目,您可以这样做:JObject
foreach (var property in jsonObject)
{
string key = property.Key;
Console.WriteLine("Key: " + key);
//cast JProperty value to JArray
JArray jsonArray = (JArray)property.Value;
foreach (JObject item in jsonArray)
{
string terrainKey = item.Value<string>("Terrain_Key");
string name = item. Value<string>("Name");
Console.WriteLine("Terrain_Key: " + terrainKey + ", Name: " + name);
}
}
评论
0赞
Hazeron
11/17/2023
是否可以在不对特定键进行硬编码调用的情况下对其进行迭代?我想检索每个键的名称,然后遍历关联的数组。这将使用 JBobject 的 children 属性来完成,对吗?
0赞
Denis Micheal
11/17/2023
@Hazeron 是的,还添加了如何做到这一点。
0赞
Hazeron
11/17/2023
谢谢你,我感谢你的帮助!
评论