Code Monkey home page Code Monkey logo

jsonflatten's Introduction

JsonFlatten

Extension methods to flatten a JSON.NET JObject to an IDictionary<string, object> or vice versa.

Usage

https://dotnetfiddle.net/jYghhm

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?"
}
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, 'null': null, 'number': 123, 'object': { 'a': 'b', 'c': 'd', 'e': 'f' }, 'date': '2014-01-01T23:28:56.782Z', 'string': 'Hello World', '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);
	}
}

jsonflatten's People

Contributors

gfoley83 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.