从 JSON 获取属性名称

Posted

技术标签:

【中文标题】从 JSON 获取属性名称【英文标题】:Get Property Name from JSON 【发布时间】:2020-03-24 20:38:54 【问题描述】:

我想像这样使用 System.Text.Json 解析 JSON 对象:

[
    "success": 
        "/a/b/c": false
    
]

我想知道第一个属性是否被命名,例如成功或错误,代码如下:

using (var document = JsonDocument.Parse(test))

  var root = document.RootElement;
  var success = root.EnumerateArray().Current;
  Console.WriteLine(success);

但不知何故,我无法获得成功属性,最重要的是它的名称。

【问题讨论】:

有一个枚举this answer到Converting newtonsoft code to System.Text.Json in .net core 3. what's equivalent of JObject.Parse and JsonProperty中任意对象属性的例子。 【参考方案1】:

您的 JSON 是一个对象数组,因此要获取数组中第一个条目中第一个属性的名称,您可以像这样组合 EnumerateArray()EnumerateObject()

using var document = JsonDocument.Parse(test);

var names = document.RootElement
    .EnumerateArray()
    .SelectMany(o => o.EnumerateObject())
    .Select(p => p.Name);

var firstName = names.FirstOrDefault();

话虽如此,JSON standard 将对象定义为 一组无序的名称/值对,因此您可能不想硬编码代码以仅检查第一个属性。以下代码检查第一个对象是否具有所需名称的 any 属性:

var propertyName = "success";

using var document = JsonDocument.Parse(test);

var hasProperty = document.RootElement
    .EnumerateArray()
    .Take(1) // Just the first object
    .Any(o => o.EnumerateObject().Any(p => p.Name == propertyName));

如果要检查数组中的任何对象是否具有所需的属性,请删除.Take(1)

演示小提琴here.

【讨论】:

【参考方案2】:

也许这有帮助

你必须移动那个枚举器,(你必须移动那个颜色 teehveeeeeyyy....)

class Program

    static void Main(string[] args)
    
        string json = "[\"success\": \"/a/b/c\": false]";
        using (var document = JsonDocument.Parse(json))
        
            var root = document.RootElement;
            var enumerator = root.EnumerateArray();
            while (enumerator.MoveNext())
            
                Console.WriteLine($"You are now at array element enumerator.Current");

                var elementContentEnumerator = enumerator.Current.EnumerateObject();
                while (elementContentEnumerator.MoveNext())
                
                    Console.WriteLine($"You are now at property elementContentEnumerator.Current.Name");
                

            
            Console.ReadLine();
        
    

另外:通过 JSONS 手动解析时需要考虑的事项

有很多功能强大的 JSON 框架可用于 C#。并且有很多可用的东西,可以使代码更流畅。尤其是 LINQ,它的意思是语言集成查询。试一试。 其中大部分使使用 JSONS 和 C# 非常方便,等等。

所以通常情况下(除非这是一件非常特殊的事情),您可以说,每当您手动解析 JSON 并手动循环遍历枚举器时,就像在上面的代码中一样,您可能没有利用C# 及其库的全部功能。

如果有帮助,请接受作为答案,

你好,迈克

【讨论】:

以上是关于从 JSON 获取属性名称的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC C# - 显示类属性名称而不是 JSON 中的属性名称

如何从 API 获取 JSON 数组中没有名称的 JSON 对象

从 json 文件中获取标签名称作为类中的变量

如何仅获取阴影属性而不是基本属性来获取 JSON 序列化?

nifi从json文件中获取属性

如何从列表“StandardListItem”中的 JSON 文件中的元素“名称”中获取所有值?