Study Programming!

保守的な金融系SIerからIT系ベンチャーに転職して1年目、カルチャーショックを受ける毎日です

JSONの基本を勉強する

MVAのIntroduction to JSON with C#から

JavaScript Object Notation
Notationとは表記法、の意味。Javascriptのオブジェクトを表記する方法、ということになる。

1.JSONの特徴

・直感的に読み書きできる
・言語に依存しない
JavaScriptと構文が同じ
・設定ファイルとして利用できる
Xmlファイルに比べると、軽量(特にMoblie Devicesにとっては重要)

2.JSONが格納できる値

・String
・数値
・Boolean
・Null
・Object
・Array

3.JSONの基本的な文法

・Key:Value のペアであらわされる
・Arrayはカギかっこ[value1, value2, value3]
・複数表す場合はカンマ,で区切る
JSON Objectsは波かっこ{}
JSON Objectの中に」JSON Objectを階層化、ネストすることができる

{
	"nameOfParent":"ParentObject",
	"age":111,
	{
	"nameOfChild":"ChildObject",
	"age":11,
	"isGood":true
	"colors":["Red","Blue","Green"]
	}
}

4.JSONC#で読み書き

Serialize, Deserializeするには、JSON.Netを利用するのが一般的なのかな。
安定、高速、かつできることが一番多いのがJson.Netらしい。
http://www.newtonsoft.com/json/help/html/jsonnetvsdotnetserializers.htm
特に、JsonConvertはStaticとして提供されているので、インスタンス化する必要がない。

NugetからJsonで検索すると一番上位に表示されるので、それをプロジェクトに追加する。

簡単なCodeExample

読み込む手順

①File.ReadAllTextですべてを純粋なStringとして読み込む
②読み込んだStringデータをJsonConvert.DerializeObjectでジェネリックを利用して、オブジェクトにコンバートする

書き込む手順

①JsonConvert.SerializeObject(Object)でString型にSerarilizeする
②File.WriteAllTextで書き込む

オブジェクトをStringにこんなにも簡単に相互変換できるってすごい!
もちろん、ここでは、.jsonファイルに書き込んでいるけど、それ以外にもオブジェクトをStringに変換できるという時点で格納場所はファイルに限られないことがわかる。

using System;
using System.IO;
using Newtonsoft.Json;

namespace JSONNETExample
{
    class Person
    {
        public string name { get; set; }
        public int age { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // deserialize JSON directly from a file
            String JSONstring = File.ReadAllText("JSON.json");
            Person p1 = JsonConvert.DeserializeObject<Person>(JSONstring);
            Console.WriteLine(p1);

            // output JSON file
            Person p2 = new Person { name = "ben", age = 46 };
            string outputJSON = JsonConvert.SerializeObject(p2);
            File.WriteAllText("Output.json", outputJSON);
        }
    }
}