C#怎么不用递归获取 json 路径及路径上的值

快乐起航2020 2021-03-04 04:55:39

{
"room": {
"GJAerialView": "产业园基地",
"L02Room": "显示器组装车间",
"MRoom": "MI车间",
"SMTRoom": "SMT车间",
"SL03Room": "多功能产品组装车间",
"unknown": "未配置的车间"
},
"room1": {
"GJAerialView1": "产业园基地1",
"L02Room1": "显示器组装车间1"
}........
}
json文件 片段如上
我们如何通过传入到后台的key(如提供第一个参数 room.GJAerialView 则程序返回 “产业园基地”,room1. L02Room1 返回 "显示器组装车间1")

记住 不用递归
...全文
1963 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
凤468 2021-03-10
  • 打赏
  • 举报
回复
学习了
快乐起航2020 2021-03-09
  • 打赏
  • 举报
回复
引用 12 楼 正怒月神 的回复:
[quote=引用 10 楼 快乐起航2020 的回复:][quote=引用 2 楼 正怒月神 的回复:]其实我觉得转对象也可以吧。。。。 但是如果你只是试用一下数据,那就jobject
非常感谢你还用心敲代码帮忙直观展示 可是我们传入的字符串是 room1.GJAerialView1 也有可能是 room.GJAerialView
引用 9 楼 wanghui0380 的回复:
[quote=引用 5 楼 wanghui0380 的回复:]依旧还是联想 人们根据css选择联想出了jquery 选择器
string name = (string)o.SelectToken("room.GJAerialView");[/code] 猜猜看,结果是啥!![/quote] string name = (string)o.SelectToken("room.GJAerialView"); 红色的是传入的参数,是动态不是写死的,我们不知道他会传什么,所以不会知道它遍历哪个json的 [/quote] 。。。。。。。方法给你了。 无非就是人家传递room.GJAerialView或者room1.GJAerialView1 你就split一下, 然后 按照代码q["xxx"]["xxx"]这样传参啊。。。 这改动一下,不困难吧。 另外,我从开始就觉得没有递归的必要。 [/quote] 关键怎么把split的后的长度和代表的字符串拼接起来 你就split一下, 然后 按照代码q["xxx"]["xxx"]这样传参啊。。。
JeffreyW 2021-03-08
  • 打赏
  • 举报
回复
感觉好像说的不太对......?
weixin_40821092 2021-03-07
  • 打赏
  • 举报
回复
线mark以下回头再看
cmfu01 2021-03-07
  • 打赏
  • 举报
回复
谢谢分享,学习中!
luj_1768 2021-03-07
  • 打赏
  • 举报
回复
哈,被教育了吧?还是赶快结帖吧。如果大神的指导你看不懂,那么仔细揣摩、认真学习最后一帖(#21)。向各位大佬致敬。
  • 打赏
  • 举报
回复
如果你还不理解为什么自己“用了递归”这类标题党(实际上这本不叫递归)有什么错误,直截了当地说,就是你的代码
  
            object value;
            json.TryGetValue(key, out value);
            value = serializer.Serialize(value);
这里是反反复复地“擦屁股、穿裤子”,在浪费时间。你们经理说你的思路跟你狡辩的“我用的是递归”毫无关系。理解别人的意思不要站在你自己的逻辑的谬误中,你先要用你们经理的逻辑来理解,你才能听得懂更多的知识。
  • 打赏
  • 举报
回复
你的代码输入一个字符串解析json,找到某个 key,把结果返回 string。然后你对于“两层查找”就反复用这个东西。 的打个比方,你要拉1厘米的屎,你“脱裤子、拉屎、擦屁股、穿上裤子......”。现在你可能要拉20厘米的屎,难道你要将这个过程重复20次吗?荒唐吧! 要查询两层节点,只需要解析一次 json,然后直接找2层节点。别说2层节点,就算找100层次的节点,也只需要解析出来一次json结构。你为什么要反复地搞什么string去解析呢?
  • 打赏
  • 举报
回复
原来你把“先查询room,找到之后再查找结果内部的GJAerialView节点”这个叫做“递归”?可真有才! 给出两层查询条件,而不用两层查找,不知道有什么意义?
公西雒 2021-03-06
  • 打赏
  • 举报
回复
引用 9 楼 wanghui0380 的回复:
[quote=引用 5 楼 wanghui0380 的回复:]依旧还是联想 人们根据css选择联想出了jquery 选择器
引用
那么人们会不会根据xml的xmlpath联想出一个jsonpath出来? 回答是肯定的 https://goessner.net/articles/JsonPath/
引用
那么做为一个被人应用最广的net json库Newtonsoft.Json 会不会支持他呢? 回答依旧是肯定的 https://www.newtonsoft.com/json/help/html/QueryJsonSelectToken.htm
难道你们就不想自己动手试试么???
JObject o = JObject.Parse(@"{
 ""room"": {
    ""GJAerialView"": ""产业园基地"",
    ""L02Room"": ""显示器组装车间"",
    ""MRoom"": ""MI车间"",
    ""SMTRoom"": ""SMT车间"",
    ""SL03Room"": ""多功能产品组装车间"",
    ""unknown"": ""未配置的车间""
  },
 ""room1"": {
    ""GJAerialView1"": ""产业园基地1"",
    ""L02Room1"": ""显示器组装车间1""   
  }
}");

            string name = (string)o.SelectToken("room.GJAerialView");
猜猜看,结果是啥!![/quote] 正解。虽然我没试 不过都8级了,这个还理解不了嘛
正怒月神 版主 2021-03-05
  • 打赏
  • 举报
回复
引用 10 楼 快乐起航2020 的回复:
[quote=引用 2 楼 正怒月神 的回复:]其实我觉得转对象也可以吧。。。。 但是如果你只是试用一下数据,那就jobject
非常感谢你还用心敲代码帮忙直观展示 可是我们传入的字符串是 room1.GJAerialView1 也有可能是 room.GJAerialView
引用 9 楼 wanghui0380 的回复:
[quote=引用 5 楼 wanghui0380 的回复:]依旧还是联想 人们根据css选择联想出了jquery 选择器
引用
那么人们会不会根据xml的xmlpath联想出一个jsonpath出来? 回答是肯定的 https://goessner.net/articles/JsonPath/
引用
那么做为一个被人应用最广的net json库Newtonsoft.Json 会不会支持他呢? 回答依旧是肯定的 https://www.newtonsoft.com/json/help/html/QueryJsonSelectToken.htm
string name = (string)o.SelectToken("room.GJAerialView");[/code] 猜猜看,结果是啥!![/quote] string name = (string)o.SelectToken("room.GJAerialView"); 红色的是传入的参数,是动态不是写死的,我们不知道他会传什么,所以不会知道它遍历哪个json的 [/quote] 。。。。。。。方法给你了。 无非就是人家传递room.GJAerialView或者room1.GJAerialView1 你就split一下, 然后 按照代码q["xxx"]["xxx"]这样传参啊。。。 这改动一下,不困难吧。 另外,我从开始就觉得没有递归的必要。
wanghui0380 2021-03-05
  • 打赏
  • 举报
回复
??为啥你关注的点不在怎么解决问题上。怎么只关注人家回复里说“你用了递归”,“你写死了"room.GJAerialView"” 我们表示无法理解哦 string path=“room.GJAerialView” var obj = o.SelectToken(path) path是变量---------变量当然是变的,人家传给你啥,你就赋值成啥总能理解把。 至于你说,我连json对象都不知道,我们表示。对不起,你这种系统做不了。因为目前的计算机系统只能做明确的目标,不能做不明确的目标。 即使是现在号称的人工智能,其实终归说也是明确的目标,只是按照明确的目标算法,算概率。 so,你要是连json和谁对应都不知道。只能写成 处理过程() .addjson1 .addjson2 var lst=await 处理(path);//把path发给所有已知的json对象处理,当然结果可能有,也可能没有,更可能有多个(有多个怎么办,算概率么) ps:如果你无法对应,那么我只能建议你看OData 或者GrarphML,即使是GrarphML这种允许调用方自己置顶查询条件,返回字段的方式。他的没一个操作都得是后台明确界定好范围的操作,而不是你说的“我想传啥就传啥,我现在想传‘’孙悟空的爸爸是谁”,你就得告诉我他是谁)
快乐起航2020 2021-03-05
  • 打赏
  • 举报
回复
引用 12 楼 正怒月神 的回复:
没有用递归 如果3层 或者3层以上的json键值对
快乐起航2020 2021-03-04
  • 打赏
  • 举报
回复
引用 2 楼 正怒月神 的回复:
其实我觉得转对象也可以吧。。。。 但是如果你只是试用一下数据,那就jobject
非常感谢你还用心敲代码帮忙直观展示 可是我们传入的字符串是 room1.GJAerialView1 也有可能是 room.GJAerialView
快乐起航2020 2021-03-04
  • 打赏
  • 举报
回复
引用 2 楼 正怒月神 的回复:
其实我觉得转对象也可以吧。。。。 但是如果你只是试用一下数据,那就jobject
非常感谢你还用心敲代码帮忙直观展示 可是我们传入的字符串是 room1.GJAerialView1 也有可能是 room.GJAerialView
引用 9 楼 wanghui0380 的回复:
[quote=引用 5 楼 wanghui0380 的回复:]依旧还是联想 人们根据css选择联想出了jquery 选择器
引用
那么人们会不会根据xml的xmlpath联想出一个jsonpath出来? 回答是肯定的 https://goessner.net/articles/JsonPath/
引用
那么做为一个被人应用最广的net json库Newtonsoft.Json 会不会支持他呢? 回答依旧是肯定的 https://www.newtonsoft.com/json/help/html/QueryJsonSelectToken.htm
string name = (string)o.SelectToken("room.GJAerialView");[/code] 猜猜看,结果是啥!![/quote] string name = (string)o.SelectToken("room.GJAerialView"); 红色的是传入的参数,是动态不是写死的,我们不知道他会传什么,所以不会知道它遍历哪个json的
wanghui0380 2021-03-04
  • 打赏
  • 举报
回复
引用 5 楼 wanghui0380 的回复:
依旧还是联想 人们根据css选择联想出了jquery 选择器
引用
那么人们会不会根据xml的xmlpath联想出一个jsonpath出来? 回答是肯定的 https://goessner.net/articles/JsonPath/
引用
那么做为一个被人应用最广的net json库Newtonsoft.Json 会不会支持他呢? 回答依旧是肯定的 https://www.newtonsoft.com/json/help/html/QueryJsonSelectToken.htm
难道你们就不想自己动手试试么???
JObject o = JObject.Parse(@"{
 ""room"": {
    ""GJAerialView"": ""产业园基地"",
    ""L02Room"": ""显示器组装车间"",
    ""MRoom"": ""MI车间"",
    ""SMTRoom"": ""SMT车间"",
    ""SL03Room"": ""多功能产品组装车间"",
    ""unknown"": ""未配置的车间""
  },
 ""room1"": {
    ""GJAerialView1"": ""产业园基地1"",
    ""L02Room1"": ""显示器组装车间1""   
  }
}");

            string name = (string)o.SelectToken("room.GJAerialView");
猜猜看,结果是啥!!
快乐起航2020 2021-03-04
  • 打赏
  • 举报
回复
引用 4 楼 Hello World, 的回复:
正则表达式匹配一下好了
这个有可能传到C# 的字符串是 room1.GJAerialView1 也有可能是 room.GJAerialView
快乐起航2020 2021-03-04
  • 打赏
  • 举报
回复
引用 4 楼 Hello World, 的回复:
正则表达式匹配一下好了
写来看看
快乐起航2020 2021-03-04
  • 打赏
  • 举报
回复
引用 2 楼 正怒月神 的回复:
其实我觉得转对象也可以吧。。。。 但是如果你只是试用一下数据,那就jobject
第一个是方法的片段 ctrl+f查找问题里面的下面这句话 //这里 经理说object可以直接取到路径上的key
wanghui0380 2021-03-04
  • 打赏
  • 举报
回复
依旧还是联想 人们根据css选择联想出了jquery 选择器
引用
那么人们会不会根据xml的xmlpath联想出一个jsonpath出来? 回答是肯定的 https://goessner.net/articles/JsonPath/
引用
那么做为一个被人应用最广的net json库Newtonsoft.Json 会不会支持他呢? 回答依旧是肯定的 https://www.newtonsoft.com/json/help/html/QueryJsonSelectToken.htm
加载更多回复(4)

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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