Querying LINQ to JSON with SelectToken

Json.NET - Quick Starts & API Documentation
Querying LINQ to JSON with SelectToken

SelectToken provides a method to query LINQ to JSON using a single string path to a desired JToken. SelectToken makes dynamic queries easy because the entire query is defined in a string.

    string name = (string)o.SelectToken("Manufacturers[0].Name");

### SelectToken

SelectToken is a method on JToken and takes a string path to a child token. SelectToken returns the child token or a null reference if a token couldn't be found at the path's location.

The path is made up of property names and array indexes separated by periods. Array indexes can use either square or round brackets. Both of the following are valid paths and are equivalent to each other: `Manufacturers[0].Name` and `Manufacturers(0).Name`.

    JObject o = JObject.Parse(@"{

      ""Stores"": [

        ""Lambton Quay"",

        ""Willis Street""

      ],

      ""Manufacturers"": [

        {

          ""Name"": ""Acme Co"",

          ""Products"": [

            {

              ""Name"": ""Anvil"",

              ""Price"": 50

            }

          ]

        },

        {

          ""Name"": ""Contoso"",

          ""Products"": [

            {

              ""Name"": ""Elbow Grease"",

              ""Price"": 99.95

            },

            {

              ""Name"": ""Headlight Fluid"",

              ""Price"": 4

            }

          ]

        }

      ]

    }");

    string name = (string)o.SelectToken("Manufacturers[0].Name");

    // Acme Co

    decimal productPrice = (decimal)o.SelectToken("Manufacturers[0].Products[0].Price");

    // 50

    string productName = (string)o.SelectToken("Manufacturers[1].Products[0].Name");

    // Elbow Grease

### SelectToken with LINQ

SelectToken can be used in combination with standard LINQ methods.

    IList<string> storeNames = o.SelectToken("Stores").Select(s => (string)s).ToList();

    // Lambton Quay

    // Willis Street

    IList<string> firstProductNames = o["Manufacturers"].Select(m => (string)m.SelectToken("Products[1].Name")).ToList();

    // null

    // Headlight Fluid

    decimal totalPrice = o["Manufacturers"].Sum(m => (decimal)m.SelectToken("Products[0].Price"));

    // 149.95