SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

Json.NETで、JSONの葉ノードをすべて列挙する

ちょろっと小ネタ、というか自分用メモ。


Json.NETを使って、C#からJSONファイル内の全ての末端ノードの情報を列挙してみました。
JSONファイルの、↓こういう末端のノードをすべて列挙します。
f:id:minami_SC:20150611233545p:plain:w200

探索対象のJSONファイルはコレ

{
    "app": {
        "name": "i18nextTest",
        "sampleText": "This is localized text."
    },
    "menu": {
        "file": "File",
        "edit": "Edit"
    },
    "level1": {
        "level2":{
            "sample": "サンプル",
            "sample2": "ほげほげ"
        },
        "array": [
            12, 23, 34
        ]
    }
}
C#のコード
        static void Main(string[] args)
        {
            var obj = JObject.Parse(File.ReadAllText(@"sample.json"));
            Traverse(obj);
        }

        public static void Traverse(JObject obj)
        {
            foreach(var item in obj)
            {
                var value = item.Value;
                // itemがツリー構造の枝/葉のどちらか判定
                var isLeaf = value.Type != JTokenType.Object;
                
                if (isLeaf)
                {
                    Console.WriteLine("Path:{0, -25}, {1}", value.Path, value.ToString(Formatting.None));
                } else
                {
                    Traverse((JObject)value);
                }
            }
        }

結果はこんな感じ。
f:id:minami_SC:20150611232916p:plain:w350

Json.NETメッチャ便利!!