将json字符串拆分为其第1个子节点并将键放入字符串数组中

时间:2014-12-01 16:51:14

标签: c# asp.net json

我有一个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));

如果我知道我在寻找什么节点但我不知道这个节点,我能做到吗?

2 个答案:

答案 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();