从 JSON 获取 属性 姓名
Get Property Name from JSON
我想像这样用 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);
}
但不知何故我无法获得成功 属性 最重要的是它的名字。
也许这有帮助
你得移动那个枚举器,(你得移动那个颜色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,意思是Language Integrated Query。试一试。
其中大部分使得使用 JSONS 和 C# 非常方便,等等。
所以通常情况下(除非你要做的是一件非常特殊的事情)你可以这样说,每当你手动解析 JSON 并手动循环枚举器时,就像上面的代码一样,您可能没有充分利用 C# 及其库的全部功能。
如有帮助,请采纳为答案,
你好,迈克
您的 JSON 是一个对象数组,因此要在数组的第一个条目中获取第一个 属性 的名称,您可以像这样组合 EnumerateArray()
and 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 将对象定义为 无序的 name/value 对 集,因此您可能不想对代码进行硬编码以进行检查只是第一个 属性。以下代码检查第一个对象是否具有所需名称的 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)
。
演示 fiddle here.
我想像这样用 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);
}
但不知何故我无法获得成功 属性 最重要的是它的名字。
也许这有帮助
你得移动那个枚举器,(你得移动那个颜色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,意思是Language Integrated Query。试一试。 其中大部分使得使用 JSONS 和 C# 非常方便,等等。
所以通常情况下(除非你要做的是一件非常特殊的事情)你可以这样说,每当你手动解析 JSON 并手动循环枚举器时,就像上面的代码一样,您可能没有充分利用 C# 及其库的全部功能。
如有帮助,请采纳为答案,
你好,迈克
您的 JSON 是一个对象数组,因此要在数组的第一个条目中获取第一个 属性 的名称,您可以像这样组合 EnumerateArray()
and 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 将对象定义为 无序的 name/value 对 集,因此您可能不想对代码进行硬编码以进行检查只是第一个 属性。以下代码检查第一个对象是否具有所需名称的 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)
。
演示 fiddle here.