我有一个Json
文件,其中包含未知的子节点,每个子节点都有未知深度的子节点。
我希望将第一级子节点名称放入数组中。
如果我不知道他们的名字或子节点的数量 - 即json结构是动态的,我该怎么做?
例如json输入
{
"childNode1":"value", "childNode2":"value", "childNode3":"value", "childNode4":"value"
}
预期输出等同于此数组:
string[] jsonArray =
new[] { "childNode1", "childnode2", "childNode3", "childnode4" };
我的代码会告诉我调试员和本地人的孩子,我怎样才能获得他们的密钥和值?
JObject json = JObject.Parse(System.IO.File.ReadAllText(filePath));
如果我知道我在寻找什么节点但我不知道这个节点,我能做到吗?
答案 0 :(得分:3)
如果将对象反序列化为字典,则可以轻松获取密钥。以下是使用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();
答案 1 :(得分:1)
你可以做到,
IEnumerable<string> ParsePropertyNames(string s)
{
var o = JObject.Parse(s);
return o.Properties().Select(p => p.Name);
}
你可以使用的,
var results = ParsePropertyNames(yourString).ToArray();