【发布时间】:2017-12-08 15:06:55
【问题描述】:
基本上,我正在使用 HTMLAgilityPack 进行一些网络抓取,我得到一个巨大的 json 作为字符串,然后我使用 json.net 包将其转换为 JObject。
现在在JObject 的某个深处,有一些我想要的对象。但由于它嵌套非常深,我想知道是否真的有办法到达这些对象,不知道它们在JObject 中的确切位置。我只知道他们的名字。有什么方法可以让我在整个JObject 中进行某种搜索,只知道我正在寻找的对象/属性名称?
遗憾的是,我找不到任何可以使用的相关问题/记录在案的方法。
【问题讨论】:
-
你可以写一个DFS,或者使用
.Descendants()。 -
用递归编写一个方法,不断迭代对象的每一层,直到找到你的值。显然,一个表示数据并利用它的模型会容易得多。 Visual Studio 甚至有一个“Paste Special”来创建一个基于 JSON 构建的类。
-
你可以使用
.Children()手动遍历未知的json,见this answer。 -
除了@Sinatr 答案之外,您还可以在使用递归的方法中使用
.Childeren()。这样你也可以骑车去找他们的孩子,以防他们有任何孩子。 -
您可以使用
SelectTokens()和How do I get a deeply-nested property from JSON string? 中所示的合适的JSONPath 表达式,也可以使用Searching for a specific JToken by name in a JObject hierarchy 中所示的递归方法