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" />
paket add JsonFlatten --version 1.0.1
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
}
}
Dependencies
-
.NETStandard 1.1
- NETStandard.Library (>= 1.6.1)
- Newtonsoft.Json (>= 9.0.1)
Used By
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 | 161,228 | 5/11/2019 |