将 JSON 字符串拆分为其构成的第一个子节点,并将键放入字符串数组中

本文关键字:字符串 数组 子节点 拆分 JSON 第一个 | 更新日期: 2023-09-27 18:32:44

我有一个Json文件,其中包含未知的子节点,每个子节点都有未知深度的子节点。

我想将第一级子节点名称放入数组中。

如果我不知道它们的名称或子节点的数量,我该怎么做 - 即 json 结构是动态的?

例如 JSON 输入

{
"childNode1":"value", "childNode2":"value", "childNode3":"value", "childNode4":"value"
}

预期输出等效于此数组:

string[] jsonArray =
     new[] { "childNode1", "childnode2", "childNode3", "childnode4" };

拥有的代码将向我显示调试器"locals"中的子项,如何获取它们的键和值?

JObject json = JObject.Parse(System.IO.File.ReadAllText(filePath));

如果我知道我正在寻找哪些节点,我可以做到,但在这种情况下我不知道?

将 JSON 字符串拆分为其构成的第一个子节点,并将键放入字符串数组中

如果将对象反序列化为字典,则可以轻松获取密钥。下面是一个使用 Json.NET 的示例。

var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(s);
string[] jsonArray = dict.Keys.ToArray();

根据您要对对象执行的操作,第二行可能是多余的。

如果您已经将其作为JObject,则可以获得如下名称:

JObject json = // something
string[] jsonArray = ((IDictionary<string, JToken>)json).Keys.ToArray(); // or
string[] jsonArray = json.Properties().Select(x => x.Name).ToArray();
你可以

做到,

IEnumerable<string> ParsePropertyNames(string s)
{
    var o = JObject.Parse(s);
    return o.Properties().Select(p => p.Name);
}

你可以像这样使用,

var results = ParsePropertyNames(yourString).ToArray();