Json.net: Kann JObject.SelectToken tun die gleiche Sache, die XPath tun kann? Wenn ja, was sind die syntax?
Die Antwort auf die Abfrage posted in 2009 wurde eine neue Funktion JObject.SelectToken
soll liefern XPath
wie Funktionalität. Ich bin jetzt mit JSON.NET 4.5 R11 und SelectToken
- Methode zur Verfügung.
Aber ich konnte nicht finden viel Dokumentation (im wesentlichen syntax) über den Pfad-string übergeben werden SelectToken
Funktion.
Folgende code erzeugt einen Json-string und auf die ich gerne ausführen einer Xpath-wie-Methode (d.h. meines Wissens SelectToken
)
IList branches = new ArrayList();
IList employees = new ArrayList();
employees.Add(new { EmpId = 1, Name = "Name1" });
employees.Add(new { EmpId = 2, Name = "Name2" });
employees.Add(new { EmpId = 3, Name = "Name3" });
IList employees2 = new ArrayList();
employees2.Add(new { EmpId = 4, Name = "Name1" });
employees2.Add(new { EmpId = 5, Name = "Name5" });
branches.Add(new { BranchName = "Branch1", Employees = employees });
branches.Add(new { BranchName = "Branch2", Employees = employees });
string json = JsonConvert.SerializeObject(branches);
var branchesDeserialised = JsonConvert.DeserializeAnonymousType(json, new[] { new { BranchName = "", Employees = new[] { new { EmpId = 0, Name = "" } } } });
JArray ja = JArray.Parse(json);
var AllName1Tokens = ja.SelectToken(@"..Name=""Name1"""); //Get all names that are having Name = "Name1" irrespective of branch
Da ich nicht die Binärdateien für die Klassen und die Struktur der Json-string ist so groß, dass es schwierig sein wird, zu verwenden dynamische. So ist die Verwendung von LINQ auf die Objekte nach der de-Serialisierung nicht möglich. Ich möchte nicht konvertieren der Json-string in XML oder ein anderes format, um die Auswahl entweder. Auch möchte ich nicht schreiben code zu analysieren.
Was sind die syntax der Path
parameter der SelectToken
Funktion? Wie wähle ich alle EmpId
von employees
wo Name=”Name1”
?
Edit1: Ist es möglich, dass das Ergebnis mit JObject.Select
(LINQ) Abfragen auf JSON-string (nicht auf das Reale Objekt) im Falle von SelectToken
ist nicht in der Lage, es zu tun? Was ist regex?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Autor JSON.NET:
Da Json.NET 6.0 supes bis SelectToken mit voller Unterstützung für JSONPath ein XPath-Abfragen wie Sprache für JSON.
Mehr details auf blog-post
Ich glaube es unterstützt nur den string der Pfad zu einem einzelnen token wie
"branches[0].employees[0].name"
Ich bin mir nicht sicher
SelectToken
tun können, und die Einschränkungen Ihrer Frage Regel die meisten gängigen Lösungen.Dokumentation hier: