Flatten nested JSON objects into dot-notation key-value pairs, and unflatten them back.
dotnet add package Philiprehberger.FlattenJsonFlatten nested JSON objects into dot-notation key-value pairs, and unflatten them back.
dotnet add package Philiprehberger.FlattenJson
using Philiprehberger.FlattenJson;
// Flatten nested JSON
var flat = JsonFlattener.Flatten("""{"a":{"b":1,"c":[2,3]}}""");
// flat["a.b"] == "1"
// flat["a.c.0"] == "2"
// flat["a.c.1"] == "3"
// Null values are preserved
var flat2 = JsonFlattener.Flatten("""{"x":null,"y":{"z":42}}""");
// flat2["x"] == null
// flat2["y.z"] == "42"
// Custom separator
var flat3 = JsonFlattener.Flatten("""{"a":{"b":1}}""", separator: "/");
// flat3["a/b"] == "1"
// Unflatten back to JSON
var json = JsonFlattener.Unflatten(flat);
// => {"a":{"b":"1","c":["2","3"]}}
using Philiprehberger.FlattenJson;
var json = """{"users": [{"name": "Alice"}, {"name": "Bob"}]}""";
var flat = JsonFlattener.Flatten(json);
// { "users.0.name": "Alice", "users.1.name": "Bob" }
using Philiprehberger.FlattenJson;
var json = """{"db": {"host": "localhost", "port": "5432"}}""";
var flat = JsonFlattener.Flatten(json, "/");
// { "db/host": "localhost", "db/port": "5432" }
using Philiprehberger.FlattenJson;
var flat = new Dictionary<string, string?>
{
["db.host"] = "localhost",
["db.port"] = "5432"
};
var json = JsonFlattener.Unflatten(flat);
// {"db":{"host":"localhost","port":"5432"}}
JsonFlattener| Method | Description |
|---|---|
Flatten(string json, string separator = ".") | Parse json and return a flat Dictionary<string, string?> using dot-notation keys |
Unflatten(Dictionary<string, string?> flat, string separator = ".") | Reconstruct a JSON string from a flat dictionary |
Notes:
null for JSON nulls)."a.0", "a.1", etc.System.Text.Json — no external dependencies.dotnet build src/Philiprehberger.FlattenJson.csproj --configuration Release
If you find this project useful: