将 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.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();