Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I beautify JSON for display in a TextBox?

Tags:

json

c#

How can I beautify JSON with C#? I want to print the result in a TextBox control.

Is it possible to use JavaScriptSerializer for this, or should I use JSON.net? Unless I have to, I'd like to avoid deserializing the string.

like image 818
Stefan Avatar asked May 30 '11 16:05

Stefan


People also ask

How do I beautify JSON in Notepad?

Open notepad++ -> ALT+P -> Plugin Manager -> Selcet JSON Viewer -> Click Install. Restart notepad++ Now you can use shortcut to format json as CTRL + ALT +SHIFT + M or ALT+P -> Plugin Manager -> JSON Viewer -> Format JSON.

How can I see JSON pretty in Notepad ++?

You need to install JSON Viewer plugin in NotePad++. plugins > plugin Manager > JSON Viewer > Install. After plugin install select text you want to format and click on plugins > JSON Viewer > Format JSON. Checkout latest version of Notepad++ to get all updated and latest plugins.

How do I display JSON data in JSON format?

Use the JSON. stringify function to Display formatted JSON in HTML. If you have unformatted JSON It will output it in a formatted way. Or Use <pre> tag for showing code itself in HTML page and with JSON.


3 Answers

Bit late to this party, but you can beautify (or minify) Json without deserialization using Json.NET:


JToken parsedJson = JToken.Parse(jsonString);
var beautified = parsedJson.ToString(Formatting.Indented);
var minified = parsedJson.ToString(Formatting.None);

Edit: following up on the discussion in the comments about performance, I measured using BenchMark.Net and there is an extra allocation cost using JToken.Parse, and a very small increase in time taken:

enter image description here

Benchmark code

like image 159
stuartd Avatar answered Oct 17 '22 20:10

stuartd


With JSON.Net you can beautify the output with a specific formatting.

Demo on dotnetfiddle.

Code

public class Product
{
    public string Name {get; set;}
    public DateTime Expiry {get; set;}
    public string[] Sizes {get; set;}
}

public void Main()
{
    Product product = new Product();
    product.Name = "Apple";
    product.Expiry = new DateTime(2008, 12, 28);
    product.Sizes = new string[] { "Small" };

    string json = JsonConvert.SerializeObject(product, Formatting.None);
    Console.WriteLine(json);
    json = JsonConvert.SerializeObject(product, Formatting.Indented);
    Console.WriteLine(json);
}

Output

{"Name":"Apple","Expiry":"2008-12-28T00:00:00","Sizes":["Small"]}
{
  "Name": "Apple",
  "Expiry": "2008-12-28T00:00:00",
  "Sizes": [
    "Small"
  ]
}
like image 46
aloisdg Avatar answered Oct 17 '22 21:10

aloisdg


You can process JSON without deserializing using the new System.Text.Json namespace, to avoid adding a dependency on json.NET. This is admittedly not as terse as stuartd's simple answer:

using System.IO;
using System.Text;
using System.Text.Json;

public static string BeautifyJson(string json)
{
    using JsonDocument document = JsonDocument.Parse(json);
    using var stream = new MemoryStream();
    using var writer = new Utf8JsonWriter(stream, new JsonWriterOptions() { Indented = true });
    document.WriteTo(writer);
    writer.Flush();
    return Encoding.UTF8.GetString(stream.ToArray());
}

The docs have more examples of how to use the low-level types in the namespace.

like image 4
RedMatt Avatar answered Oct 17 '22 20:10

RedMatt