[英]Parse a json file generated for jstree in C#
我希望解析一個JSON文件,該文件是動態生成的,並且沒有明確的結構。
[
{
"children": [
{
"children": [
{
"children": [],
"text": "Child node 2.txt",
"isFolder": false,
"id": "1childnode2.txt",
"itsPath": "C:\\Users\\pandyapa\\Root node\\Child node 2.txt",
"type": "itsfile"
}
],
"text": "Child node 1.txt",
"isFolder": false,
"id": "0childnode1.txt",
"itsPath": "C:\\Users\\pandyapa\\Root node\\Child node 1.txt",
"type": "itsfile"
},
{
"children": [],
"text": "Child node 2.txt",
"isFolder": false,
"id": "1childnode2.txt",
"itsPath": "C:\\Users\\pandyapa\\Root node\\Child node 2.txt",
"type": "itsfile"
},
{
"children": [],
"text": "Child node 3.txt",
"isFolder": false,
"id": "2childnode3.txt",
"itsPath": "C:\\Users\\pandyapa\\Root node\\Child node 3.txt",
"type": "itsfile"
}
],
"text": "Root node",
"isFolder": true,
"id": "3rootnode",
"itsPath": "C:\\Users\\pandyapa\\Root node",
"type": "default"
}
]
此JSON可以包含任何嵌套子代。 我希望解析每個JSON對象,比較其“ id”鍵並檢索“ itspath”值。 我嘗試過,但是沒有成功。 非常感謝您的幫助。
在我看來,您的JSON 確實具有非常明確的結構,可以通過此遞歸類表示:
public class Node
{
public Node[] Children { get; set; }
public string Text { get; set; }
public bool IsFolder { get; set; }
public string Id { get; set; }
public string ItsPath { get; set; }
public string Type { get; set; }
}
可能是JSON可以深度嵌套,並且您可能不提前知道每個級別有多少個級別或有多少個子級,但是事實是每個“節點”具有統一的結構。 這很好,因為這意味着可以使用諸如Json.Net之類的解析器輕松對它進行反序列化 。 實際上,您只需要一行代碼即可做到:
List<Node> nodes = JsonConvert.DeserializeObject<List<Node>>(json);
對節點進行反序列化后,您需要能夠找到所需的節點。 通過向該類引入一個簡短的“ DescendantsAndSelf”方法,可以使用LINQ方法使結構可查詢。
public IEnumerable<Node> DescendantsAndSelf()
{
yield return this;
if (Children != null)
{
foreach (Node child in Children)
{
yield return child;
}
}
}
現在,您可以執行此操作以通過ID查找特定的節點:
var idToFind = "2childnode3.txt";
var node = nodes.SelectMany(n => n.DescendantsAndSelf())
.Where(n => n.Id == idToFind)
.FirstOrDefault();
if (node != null)
{
Console.WriteLine(node.ItsPath);
}
else
{
Console.WriteLine("Not found");
}
小提琴: https : //dotnetfiddle.net/u9gDTc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.