【发布时间】:2019-09-28 05:27:12
【问题描述】:
我在我的项目中使用Newtonsoft.Json。我有这样的JObject:
{
"4781":"Name 1",
"1577":"Name 2",
"9973":"Name 3"
}
我用JObject.Parse() 成功解析了它。我需要从这个 JObject (“4781”)中获取第一个密钥。如何获得?
【问题讨论】:
我在我的项目中使用Newtonsoft.Json。我有这样的JObject:
{
"4781":"Name 1",
"1577":"Name 2",
"9973":"Name 3"
}
我用JObject.Parse() 成功解析了它。我需要从这个 JObject (“4781”)中获取第一个密钥。如何获得?
【问题讨论】:
Json.NET 不直接提供对 JObject 属性的整数索引访问。
如果您使用JObject.Parse(jsonString)[0],您会收到带有消息的ArgumentException
使用无效键值访问的 JObject 值:0。应为对象属性名称。"
演示 #1 here.
我怀疑 Json.NET 是以这种方式实现的,因为 JSON standard 声明“一个 object 是一组 无序 名称/值对。”
话虽如此,JObject 继承自 JContainer,explicitly 实现了 IList<JToken>。因此,如果您将 JObject 向上转换为 IList<JToken>,您可以通过与文档顺序对应的整数索引来访问属性:
IList<JToken> obj = JObject.Parse(jsonString);
var firstName = ((JProperty)obj[0]).Name;
演示小提琴#2 here.
或者,您可以将 LINQ 用于类型安全的解决方案,无需任何转换:
using System;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
var obj = JObject.Parse(jsonString);
var firstName = obj.Properties().Select(p => p.Name).FirstOrDefault();
演示小提琴#3 here.
【讨论】: