【问题标题】:How to get first key from JObject?如何从 JObject 获取第一个密钥?
【发布时间】:2019-09-28 05:27:12
【问题描述】:

我在我的项目中使用Newtonsoft.Json。我有这样的JObject

{
    "4781":"Name 1",
    "1577":"Name 2",
    "9973":"Name 3"
}

我用JObject.Parse() 成功解析了它。我需要从这个 JObject (“4781”)中获取第一个密钥。如何获得?

【问题讨论】:

    标签: wpf json.net


    【解决方案1】:

    Json.NET 不直接提供对 JObject 属性的整数索引访问。

    如果您使用JObject.Parse(jsonString)[0],您会收到带有消息的ArgumentException

    使用无效键值访问的 JObject 值:0。应为对象属性名称。"

    演示 #1 here.

    我怀疑 Json.NET 是以这种方式实现的,因为 JSON standard 声明“一个 object 是一组 无序 名称/值对。”

    话虽如此,JObject 继承自 JContainerexplicitly 实现了 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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 2021-12-30
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多