如何在JSON数组中按键获取元素

mxg2im7a  于 2023-01-14  发布在  其他
关注(0)|答案(4)|浏览(200)

我有以下JArray对象(newtonsoft.json)

[
  {
    "Administrator": 3
  },
  {
    "User": 1
  },
  {
    "Guest": 5
  }
]

如何检索键“Administrator”的值(3)?它要求我输入数组索引,但我希望按键检索,因为该列表可以扩展和收缩。

64jmpszr

64jmpszr1#

使用Json.Net,您可以简单地执行以下操作

int value = (int)JArray.Parse(json).Children()["Administrator"].First();
j13ufse2

j13ufse22#

string json = @"[
  {
    ""Administrator"": 3
  },
  {
    ""User"": 1
  },
  {
    ""Guest"": 5
  }
]";

JArray jsonObject = JsonConvert.DeserializeObject<JArray>(json);

var adminVal = jsonObject[0]["Administrator"].Value<int>();

就像评论中说的JSON是无效的。这里是修复的版本以及如何取Administrator的值。

    • 编辑**

下面介绍如何在不指定JArray索引的情况下执行此操作。

var adminObject = jsonObject.Children<JObject>().FirstOrDefault(x=>x.Children<JProperty>().Any(y=>y.Name == "Administrator"));
var adminObjectValue = adminObject.GetValue("Administrator");
tnkciper

tnkciper3#

首先可以使用Json.NET将Json读取为字典列表,然后通过linq合并它们:

var json = @"[
  {
    ""Administrator"": 3
  },
  {
    ""User"": 1
  },
  {
    ""Guest"": 5
  }
]";

var list = JsonConvert.DeserializeObject<List<Dictionary<string, int>>>(json);
var dict = list.SelectMany(d => d).ToDictionary(p => p.Key, p => p.Value);
var adminId = dict["Administrator"];
vlju58qv

vlju58qv4#

你的杰森应该是。

[{
    "Administrator": 3
}, {
    "User": 1
}, {
    "Guest": 5
}]

您可以使用NewtonSoft.Json dll将此json反序列化为以下类,并通过类对象获取Administrator的值。

public class ClassName
{
    public int Administrator { get; set; }
    public int? User { get; set; }
    public int? Guest { get; set; }
}

将json反串行化为类对象的代码。

ClassName obj = JsonConvert.DeserializeObject<ClassName>(json);
//obj.Administrator get or set it according to your requirement.

相关问题