This C# program demonstrates how to select tokens from a JSON document with the Newtonsoft Json package. Newtonsoft.json is a Nuget package that must be installed in order to run this program.
using System; using System.Collections.Generic; using System.Linq; // Requires Nuget Newtonsoft.Json package using Newtonsoft.Json.Linq; namespace SelectingNodes { internal class Program { static void Main(string[] args) { string sBibleJson = @"{ ""Bible"": [ { ""Old Testament"": { ""Content"": { ""Pentateuch"": [ { ""Name"": ""Genesis"", ""Chapters"": ""50"" }, { ""Name"": ""Exodus"", ""Chapters"": ""40"" }, { ""Name"": ""Leviticus"", ""Chapters"": ""27"" }, ""Numbers"", ""Deuteronomy"" ], ""Historical"": [ ""Joshua"", ""Judges"" ] } } }, { ""New Testament"": { ""Content"": { ""Gospels"": [ { ""Name"": ""Matthew"", ""Chapters"": ""28"" }, { ""Name"": ""Mark"", ""Chapters"": ""16"" }, ""Luke"", { ""Name"": ""John"", ""Chapters"": ""21"" } ] } } } ]}"; JObject qJObjectBible = JObject.Parse(sBibleJson); // Print the entire document Console.WriteLine("-------------------THE ENTIRE DOCUMENT-------------------"); Console.WriteLine(qJObjectBible.ToString()); // Select a single token via path Console.WriteLine("-------------------SELECT THE OLD TESTAMENT WITH AN INDEX-------------------"); Console.WriteLine(qJObjectBible.SelectToken("Bible[0]").ToString()); // Get the element with the historical books of the Old Testament Console.WriteLine("-------------------SELECT THE HISTORICAL BOOKS-------------------"); Console.WriteLine(qJObjectBible.SelectToken("Bible[0]['Old Testament'].Content.Historical").ToString()); // Linq queries // Get the books of the Pentateuch that have 30 or more chapter Console.WriteLine("-------------------SELECT BOOKS OF THE PENTATEUCH WITH 30 OR MORE CHAPTERS-------------------"); IEnumerable<JToken> qaLargeBooks = qJObjectBible.SelectTokens("$..Pentateuch[?(@.Chapters >= 30)].Name"); foreach (JToken qBook in qaLargeBooks) { Console.WriteLine(qBook); } // Display the paths of the content elements Console.WriteLine("-------------------DISPLAY CONTENT ELEMENT PATH VALUES-------------------"); IList<JToken> qaContentList = qJObjectBible.SelectTokens("..Content").ToList(); foreach (JToken qContent in qaContentList) { Console.WriteLine(qContent.Path); } // Get the names of all of the books of the Pentateuch that are objects with a name property Console.WriteLine("-------------------SELECT BOOKS OF THE PENTATEUCH WITH A NAME PROPERTY-------------------"); var qaPentBookNames = from p in qJObjectBible["Bible"][0]["Old Testament"]["Content"]["Pentateuch"] where p.Type != JTokenType.String select (string)p["Name"]; foreach (JToken qBookName in qaPentBookNames) { Console.WriteLine(qBookName); } // Get the names of all of the books of the Bible that are objects with a name property Console.WriteLine("-------------------SELECT BOOK NAMES OF THE BIBLE ALPHABETICALLY-------------------"); var qaBookNames = from p in qJObjectBible.SelectTokens("$..Content[?(@..Name != '')]").Children().Values() where p.Type != JTokenType.String orderby p["Name"] ascending select (string)p["Name"]; foreach (JToken qBookName in qaBookNames) { Console.WriteLine(qBookName); } } } }
-------------------THE ENTIRE DOCUMENT------------------- { "Bible": [ { "Old Testament": { "Content": { "Pentateuch": [ { "Name": "Genesis", "Chapters": "50" }, { "Name": "Exodus", "Chapters": "40" }, { "Name": "Leviticus", "Chapters": "27" }, "Numbers", "Deuteronomy" ], "Historical": [ "Joshua", "Judges" ] } } }, { "New Testament": { "Content": { "Gospels": [ { "Name": "Matthew", "Chapters": "28" }, { "Name": "Mark", "Chapters": "16" }, "Luke", { "Name": "John", "Chapters": "21" } ] } } } ] } -------------------SELECT THE OLD TESTAMENT WITH AN INDEX------------------- { "Old Testament": { "Content": { "Pentateuch": [ { "Name": "Genesis", "Chapters": "50" }, { "Name": "Exodus", "Chapters": "40" }, { "Name": "Leviticus", "Chapters": "27" }, "Numbers", "Deuteronomy" ], "Historical": [ "Joshua", "Judges" ] } } } -------------------SELECT THE HISTORICAL BOOKS------------------- [ "Joshua", "Judges" ] -------------------SELECT BOOKS OF THE PENTATEUCH WITH 30 OR MORE CHAPTERS------------------- Genesis Exodus -------------------DISPLAY CONTENT ELEMENT PATH VALUES------------------- Bible[0]['Old Testament'].Content Bible[1]['New Testament'].Content -------------------SELECT BOOKS OF THE PENTATEUCH WITH A NAME PROPERTY------------------- Genesis Exodus Leviticus -------------------SELECT BOOK NAMES OF THE BIBLE ALPHABETICALLY------------------- Exodus Genesis John Leviticus Mark Matthew Press any key to continue . . .
© 20072025 XoaX.net LLC. All rights reserved.