JSON String Beautifier
JSON String을 화면에 표시할 때, 라인 및 들여쓰기를 제대로 하지 않으면 읽기 어려운 경우가 있다. 예를 들어, 웹서비스 등의 외부 소스로부터 JSON String을 전달 받은 경우, 일반적으로 포맷팅이 잘 되어 있지 않은데, 이때 간단한 포맷팅 기능을 추가해서 화면에 출력하는 것이 좋다. (JSON 데이타를 이렇게 직접 출력하는 것은 디버깅에서 많이 사용된다)
JSON Beautifier는 여러가지 방식으로 구현할 수 있지만, 여기서는 JSON.NET에 내장된 포맷팅 기능을 이용해서 간단히 구현해 본다.
먼저 JsonConvert.SerializeObject() 메서드를 사용하는 방법이 있는데, SerializeObject()의 두번째 파라미터로 Formatting.Indented 옵션을 주면 자동으로 라인/들여쓰기된 문자열을 리턴해 준다 (아래 예제 방법1).
또 다른 방법으로 JToken.ToString()을 실행하는 방법으로 JToken을 얻기 위해 JValue.Parse()를 실행한다. 즉, JValue.Parse(json).ToString(Formatting.Indented)과 같은 방식으로 호출하면 되는데, 이 방식이 전자보다 좀 더 간단한 방식이다 (아래 예제 방법2).
JSON Beautifier는 여러가지 방식으로 구현할 수 있지만, 여기서는 JSON.NET에 내장된 포맷팅 기능을 이용해서 간단히 구현해 본다.
먼저 JsonConvert.SerializeObject() 메서드를 사용하는 방법이 있는데, SerializeObject()의 두번째 파라미터로 Formatting.Indented 옵션을 주면 자동으로 라인/들여쓰기된 문자열을 리턴해 준다 (아래 예제 방법1).
또 다른 방법으로 JToken.ToString()을 실행하는 방법으로 JToken을 얻기 위해 JValue.Parse()를 실행한다. 즉, JValue.Parse(json).ToString(Formatting.Indented)과 같은 방식으로 호출하면 되는데, 이 방식이 전자보다 좀 더 간단한 방식이다 (아래 예제 방법2).
예제
using System;
using System.Windows.Forms;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; // JValue
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 테스트용 JSON string 만들기
var p = new { Id = 1, Name = "Alex", Address = new { City = "Redmond", State = "WA", Zip = "98052" } };
string jsonString = JsonConvert.SerializeObject(p);
txtOriginal.Text = jsonString;
}
private void btnBeautifier_Click(object sender, EventArgs e)
{
// JSON string을 보기 좋게 만듦
string jsonString = txtOriginal.Text;
txtBeautified.Text = Beautify(jsonString);
}
// 방법2: JToken.ToString()을 이용하는 방법
private string Beautify(string jsonString)
{
string beautifiedJson = JValue.Parse(jsonString).ToString(Formatting.Indented);
return beautifiedJson;
}
// 방법1: SerializeObject() Formatting을 이용하는 방법
private string Beautify_AnotherWay(string jsonString)
{
dynamic json = JsonConvert.DeserializeObject(jsonString);
return JsonConvert.SerializeObject(json, Formatting.Indented);
}
}
}
using System.Windows.Forms;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq; // JValue
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 테스트용 JSON string 만들기
var p = new { Id = 1, Name = "Alex", Address = new { City = "Redmond", State = "WA", Zip = "98052" } };
string jsonString = JsonConvert.SerializeObject(p);
txtOriginal.Text = jsonString;
}
private void btnBeautifier_Click(object sender, EventArgs e)
{
// JSON string을 보기 좋게 만듦
string jsonString = txtOriginal.Text;
txtBeautified.Text = Beautify(jsonString);
}
// 방법2: JToken.ToString()을 이용하는 방법
private string Beautify(string jsonString)
{
string beautifiedJson = JValue.Parse(jsonString).ToString(Formatting.Indented);
return beautifiedJson;
}
// 방법1: SerializeObject() Formatting을 이용하는 방법
private string Beautify_AnotherWay(string jsonString)
{
dynamic json = JsonConvert.DeserializeObject(jsonString);
return JsonConvert.SerializeObject(json, Formatting.Indented);
}
}
}