JsonFlatten 1.0.1

Flatten a JSON.NET JObject to a Dictionary<string, object> and vice versa.

Install-Package JsonFlatten -Version 1.0.1
dotnet add package JsonFlatten --version 1.0.1
<PackageReference Include="JsonFlatten" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add JsonFlatten --version 1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

JsonFlatten

Extension methods to flatten a JSON.NET JObject to an IDictionary<string, object> or vice versa.
Supports flattening & unflattening complex, hierarchical JSON objects also e.g. JSON Schema objects.
Optional includeNullAndEmptyValues parameter that when set to false, ignores null and empty properties (e.g. null, "", {}, []) when flattening.

Example

This:

{
  "$id": "https://example.com/arrays.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A representation of a person, company, organization, or place",
  "type": "object",
  "properties": {
    "fruits": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "vegetables": {
      "type": "array",
      "items": { "$ref": "#/definitions/veggie" }
    }
  },
  "definitions": {
    "veggie": {
      "type": "object",
      "required": [ "veggieName", "veggieLike" ],
      "properties": {
        "veggieName": {
          "type": "string",
          "description": "The name of the vegetable."
        },
        "veggieLike": {
          "type": "boolean",
          "description": "Do I like this vegetable?"
        }
      }
    }
  }
}

Becomes this:

{
	"$id": "https://example.com/arrays.schema.json",
	"$schema": "http://json-schema.org/draft-07/schema#",
	"description": "A representation of a person, company, organization, or place",
	"type": "object",
	"properties.fruits.type": "array",
	"properties.fruits.items.type": "string",
	"properties.vegetables.type": "array",
	"properties.vegetables.items.$ref": "#/definitions/veggie",
	"definitions.veggie.type": "object",
	"definitions.veggie.required[0]": "veggieName",
	"definitions.veggie.required[1]": "veggieLike",
	"definitions.veggie.properties.veggieName.type": "string",
	"definitions.veggie.properties.veggieName.description": "The name of the vegetable.",
	"definitions.veggie.properties.veggieLike.type": "boolean",
	"definitions.veggie.properties.veggieLike.description": "Do I like this vegetable?"
}

Usage

https://dotnetfiddle.net/jYghhm

using System;
using System.Collections.Generic;
using JsonFlatten;
using Newtonsoft.Json.Linq;

public class Program
{
	public static void Main()
	{
		var json = @"{ 'array': [ 1, 2, 3 ], 'boolean': true, 'number': 123, 'object': { 'a': 'b', 'c': 'd', 'e': 'f' }, 'date': '2014-01-01T23:28:56.782Z', 'string': 'Hello World', 'null': null, 'emptyString': '', 'emptyObject': {}, 'emptyArray': [] }";
		JObject jObj = JObject.Parse(json);
		
		// Flatten a JObject to a dictionary. var dic = jObj.Flatten(); also works.
		Dictionary<string, object> flattened = new Dictionary<string, object>(jObj.Flatten());
		
		// Retrieve and cast an item from the dictionary
		var date = flattened.Get<DateTime>("date"); // 1/1/2014 11:28:56 PM
        
      		// Unflatten a dictionary to a JObject
		JObject unflattened = flattened.Unflatten();
       		JToken.DeepEquals(jObj, unflattened); // True
		
		// Update an entry
		flattened.Set("date", date.AddDays(5));
        
        	// Try get logic for properties
       		flattened.TryGet<DateTime>("date", out var updatedDate); // updatedDate: 1/6/2014 11:28:56 PM
		
		// Flatten a JObject and exclude any properties that are null or empty e.g. have the value null, "", {}, or []
		var flattenedWithoutEmpty = jObj.Flatten(includeNullAndEmptyValues: false); // Properties "null", "emptyString", "emptyObject" & "emptyArray" are not present
	}
}

JsonFlatten

Extension methods to flatten a JSON.NET JObject to an IDictionary<string, object> or vice versa.
Supports flattening & unflattening complex, hierarchical JSON objects also e.g. JSON Schema objects.
Optional includeNullAndEmptyValues parameter that when set to false, ignores null and empty properties (e.g. null, "", {}, []) when flattening.

Example

This:

{
  "$id": "https://example.com/arrays.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A representation of a person, company, organization, or place",
  "type": "object",
  "properties": {
    "fruits": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "vegetables": {
      "type": "array",
      "items": { "$ref": "#/definitions/veggie" }
    }
  },
  "definitions": {
    "veggie": {
      "type": "object",
      "required": [ "veggieName", "veggieLike" ],
      "properties": {
        "veggieName": {
          "type": "string",
          "description": "The name of the vegetable."
        },
        "veggieLike": {
          "type": "boolean",
          "description": "Do I like this vegetable?"
        }
      }
    }
  }
}

Becomes this:

{
	"$id": "https://example.com/arrays.schema.json",
	"$schema": "http://json-schema.org/draft-07/schema#",
	"description": "A representation of a person, company, organization, or place",
	"type": "object",
	"properties.fruits.type": "array",
	"properties.fruits.items.type": "string",
	"properties.vegetables.type": "array",
	"properties.vegetables.items.$ref": "#/definitions/veggie",
	"definitions.veggie.type": "object",
	"definitions.veggie.required[0]": "veggieName",
	"definitions.veggie.required[1]": "veggieLike",
	"definitions.veggie.properties.veggieName.type": "string",
	"definitions.veggie.properties.veggieName.description": "The name of the vegetable.",
	"definitions.veggie.properties.veggieLike.type": "boolean",
	"definitions.veggie.properties.veggieLike.description": "Do I like this vegetable?"
}

Usage

https://dotnetfiddle.net/jYghhm

using System;
using System.Collections.Generic;
using JsonFlatten;
using Newtonsoft.Json.Linq;

public class Program
{
	public static void Main()
	{
		var json = @"{ 'array': [ 1, 2, 3 ], 'boolean': true, 'number': 123, 'object': { 'a': 'b', 'c': 'd', 'e': 'f' }, 'date': '2014-01-01T23:28:56.782Z', 'string': 'Hello World', 'null': null, 'emptyString': '', 'emptyObject': {}, 'emptyArray': [] }";
		JObject jObj = JObject.Parse(json);
		
		// Flatten a JObject to a dictionary. var dic = jObj.Flatten(); also works.
		Dictionary<string, object> flattened = new Dictionary<string, object>(jObj.Flatten());
		
		// Retrieve and cast an item from the dictionary
		var date = flattened.Get<DateTime>("date"); // 1/1/2014 11:28:56 PM
        
      		// Unflatten a dictionary to a JObject
		JObject unflattened = flattened.Unflatten();
       		JToken.DeepEquals(jObj, unflattened); // True
		
		// Update an entry
		flattened.Set("date", date.AddDays(5));
        
        	// Try get logic for properties
       		flattened.TryGet<DateTime>("date", out var updatedDate); // updatedDate: 1/6/2014 11:28:56 PM
		
		// Flatten a JObject and exclude any properties that are null or empty e.g. have the value null, "", {}, or []
		var flattenedWithoutEmpty = jObj.Flatten(includeNullAndEmptyValues: false); // Properties "null", "emptyString", "emptyObject" & "emptyArray" are not present
	}
}

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated
1.0.1 120,877 5/11/2019