如何获取json中,未知名节点的值?

weixin_43598436 2019-05-31 03:45:29
各位大神,小弟刚接触.net不久。遇到json数据处理都是用的Newtonsoft.Json。一般要获取某个节点,只要用jo[节点名]就可以获得它的值了。 但是今天遇到了一种特殊的情况,这次项目服务器那边传过来的节点格式大概是这样的: {
"student": {
"abb": {
"name": "aab",
"url": "http://www.google.com"
},
"bba": {
"name": "bba",
"url": "http://www.baidu.com"
},
"cca": {
"name": "cca",
"url": "http://www.SoSo.com"
}
}
} student节点下面的3个对象,aab、bbc、cca分别代表3个学生的名字。而我这边是无法提前知道他们的名字的。这意味着我不能用jo[student][aab]的方式获取数据(因为我并不能事先知道abb这个节点名) 不知道大神们有什么办法获取到呢?(上面给的json是简化后的,实际上十分的复杂)
...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
stherix 2019-05-31
  • 打赏
  • 举报
回复
吐血,这种情况不应该是数组吗,居然写成了对象 不过也可以遍历来获取所有的子节点
正怒月神 2019-05-31
  • 打赏
  • 举报
回复
string json = "{" +
    "\"student\": {" +
        "\"abb\": {" +
            "\"name\": \"aab\"," +
            "\"url\": \"http://www.google.com\"" +
        "}," +
        "\"bba\": {" +
            "\"name\": \"bba\"," +
            "\"url\": \"http://www.baidu.com\"" +
        "}," +
        "\"cca\": {" +
            "\"name\": \"cca\"," +
            "\"url\": \"http://www.SoSo.com\"" +
        "}" +
    "}" +
"}";
            var q = JObject.Parse(json)["student"].SelectMany(x => x.Select(y => new { name = y["name"], url = y["url"] }));

            foreach (var item in q)
            {
                Console.WriteLine(item.name);
                Console.WriteLine(item.url);
                Console.WriteLine("=====================");
            }

            Console.ReadKey();
  • 打赏
  • 举报
回复
用Dictionary<string,T>来反序列化,你的student对应的值就是个字典
Bridge_go 2019-05-31
  • 打赏
  • 举报
回复
用正则表达式试试

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧