Table of Contents

Class JDataResultExtensions

Namespace
Codebelt.Extensions.Newtonsoft.Json
Assembly
Codebelt.Extensions.Newtonsoft.Json.dll

Extension methods for the JDataResult class.

public static class JDataResultExtensions
Inheritance
JDataResultExtensions

Examples

The following example shows how to parse JSON and flatten its hierarchical structure. When working with complex nested JSON documents—API responses, configuration files, or database exports—developers need to search for specific properties, validate values at any depth, or transform data without writing recursive navigation code. The JDataResultExtensions class provides extension methods to flatten nested structures, extract specific properties or arrays, and process results using standard LINQ queries. This approach transforms JSON navigation from imperative recursion into declarative LINQ queries that are easier to read, maintain, and test. This example demonstrates parsing multi-level JSON with users and tags, then using extension methods to flatten, extract objects by property names, and group array structures:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Codebelt.Extensions.Newtonsoft.Json;

namespace Examples;

class JDataResultExtensionsExample
{
    static void Main()
    {
        var json = """
            {
              "users": [
                { "id": 1, "name": "Alice", "age": 30 },
                { "id": 2, "name": "Bob", "age": 25 }
              ],
              "tags": ["admin", "user"]
            }
            """;

        var results = JData.ReadAll(json);
        var flat = results.Flatten().ToList();

        // Demonstrate flattening
        foreach (var item in flat)
        {
            if (!string.IsNullOrEmpty(item.PropertyName))
            {
                Console.WriteLine($"{item.Path}: {item.Value}");
            }
        }
        
        // Demonstrate ExtractObjectValues to extract specific properties from objects
        flat.ExtractObjectValues("id,name,age", extracted =>
        {
            var id = extracted["id"].Value;
            var name = extracted["name"].Value;
            var age = extracted["age"].Value;
            Console.WriteLine($"Extracted: id={id}, name={name}, age={age}");
        });
        
        // Demonstrate ExtractArrayValues to extract and process arrays separately
        flat.ExtractArrayValues("users,tags", extracted =>
        {
            var userCount = extracted["users"].Count();
            var tagCount = extracted["tags"].Count();
            Console.WriteLine($"Grouped arrays: found {userCount} users and {tagCount} tags");
        });
    }
}

Methods

ExtractArrayValues(IEnumerable<JDataResult>, string, Action<IDictionary<string, IEnumerable<JDataResult>>>)

Extracts one or more values from JSON arrays using the specified propertyNames and extractor delegate.

public static void ExtractArrayValues(this IEnumerable<JDataResult> source, string propertyNames, Action<IDictionary<string, IEnumerable<JDataResult>>> extractor)

Parameters

source IEnumerable<JDataResult>

The sequence of JDataResult to parse.

propertyNames string

The comma-delimited property names (JSON path) to math in a JSON document.

extractor Action<IDictionary<string, IEnumerable<JDataResult>>>

The delegate that will extract values from propertyNames.

ExtractObjectValues(IEnumerable<JDataResult>, string, Action<IDictionary<string, JDataResult>>)

Extracts one or more values from JSON objects using the specified propertyNames and extractor delegate.

public static void ExtractObjectValues(this IEnumerable<JDataResult> source, string propertyNames, Action<IDictionary<string, JDataResult>> extractor)

Parameters

source IEnumerable<JDataResult>

The sequence of JDataResult to parse.

propertyNames string

The comma-delimited property names (JSON path) to math in a JSON document.

extractor Action<IDictionary<string, JDataResult>>

The delegate that will extract values from propertyNames.

Flatten(IEnumerable<JDataResult>)

Flattens the entirety of the JSON hierarchical source into an IEnumerable<T> sequence.

public static IEnumerable<JDataResult> Flatten(this IEnumerable<JDataResult> source)

Parameters

source IEnumerable<JDataResult>

The IEnumerable<T> to extend.

Returns

IEnumerable<JDataResult>

An IEnumerable<T> sequence of JDataResult objects.