PR

【C#入門】JSONデータの解析方法: 実践ガイド

【C#】

はじめに

JSON(JavaScript Object Notation)は、データの交換形式として広く使用されています。シンプルで読みやすく、プログラム間でのデータのやり取りに最適です。C#では、JSONデータを解析するためのライブラリが豊富に用意されています。本記事では、C#を使ったJSONデータの解析方法について、具体的な例を交えながら解説します。初心者の方でも理解しやすいように、基本的な解析方法から実践的な応用例までを順を追って説明します。

JSONデータの基本

JSONとは?

JSONは、キーと値のペアで構成されるデータフォーマットです。以下に、JSONデータのシンプルな例を示します。

{
    "name": "John Doe",
    "age": 30,
    "isStudent": false,
    "courses": ["Math", "Science", "History"]
}

この例では、nameageisStudentcoursesというキーが存在し、それぞれに対応する値が設定されています。

C#でのJSON解析ライブラリ

C#でJSONデータを解析するための主要なライブラリとして、以下の2つがよく使用されます。

  1. System.Text.Json
  2. Newtonsoft.Json(Json.NET)

System.Text.JsonによるJSON解析

System.Text.Jsonの概要

System.Text.Jsonは、.NET Core 3.0以降で使用できる標準のJSON解析ライブラリです。軽量で高速なJSON処理が可能です。

基本的なJSON解析

以下の例では、System.Text.Jsonを使用してJSONデータを解析する方法を示します。

JSON文字列をオブジェクトに変換

まず、JSON文字列をC#オブジェクトに変換する方法を見てみましょう。

using System;
using System.Text.Json;

class Program
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public bool IsStudent { get; set; }
        public string[] Courses { get; set; }
    }

    static void Main()
    {
        string jsonString = @"{
            ""name"": ""John Doe"",
            ""age"": 30,
            ""isStudent"": false,
            ""courses"": [""Math"", ""Science"", ""History""]
        }";

        Person person = JsonSerializer.Deserialize<Person>(jsonString);

        Console.WriteLine($"Name: {person.Name}");
        Console.WriteLine($"Age: {person.Age}");
        Console.WriteLine($"Is Student: {person.IsStudent}");
        Console.WriteLine("Courses: " + string.Join(", ", person.Courses));
    }
}

この例では、JSON文字列をPersonクラスのインスタンスにデシリアライズしています。JsonSerializer.Deserializeメソッドを使用してJSON文字列を解析し、C#オブジェクトに変換します。

オブジェクトをJSON文字列に変換

次に、C#オブジェクトをJSON文字列にシリアライズする方法を見てみましょう。

using System;
using System.Text.Json;

class Program
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public bool IsStudent { get; set; }
        public string[] Courses { get; set; }
    }

    static void Main()
    {
        Person person = new Person
        {
            Name = "Jane Doe",
            Age = 25,
            IsStudent = true,
            Courses = new string[] { "Physics", "Chemistry" }
        };

        string jsonString = JsonSerializer.Serialize(person);
        Console.WriteLine(jsonString);
    }
}

この例では、PersonクラスのインスタンスをJSON文字列にシリアライズしています。JsonSerializer.Serializeメソッドを使用してオブジェクトをJSON形式に変換します。

高度なJSON解析

部分的なJSONデータの解析

一部のフィールドだけを解析する場合、JsonDocumentクラスを使用します。

using System;
using System.Text.Json;

class Program
{
    static void Main()
    {
        string jsonString = @"{
            ""name"": ""John Doe"",
            ""age"": 30,
            ""isStudent"": false,
            ""courses"": [""Math"", ""Science"", ""History""]
        }";

        using (JsonDocument doc = JsonDocument.Parse(jsonString))
        {
            JsonElement root = doc.RootElement;
            string name = root.GetProperty("name").GetString();
            int age = root.GetProperty("age").GetInt32();

            Console.WriteLine($"Name: {name}");
            Console.WriteLine($"Age: {age}");
        }
    }
}

この例では、JsonDocument.Parseメソッドを使用してJSON文字列を解析し、JsonElementから特定のプロパティを取得しています。

Newtonsoft.Json(Json.NET)によるJSON解析

Newtonsoft.Jsonの概要

Newtonsoft.Jsonは、C#で最も広く使用されているJSON解析ライブラリです。豊富な機能を持ち、柔軟なJSON処理が可能です。

基本的なJSON解析

JSON文字列をオブジェクトに変換

以下の例では、Newtonsoft.Jsonを使用してJSONデータを解析する方法を示します。

using System;
using Newtonsoft.Json;

class Program
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public bool IsStudent { get; set; }
        public string[] Courses { get; set; }
    }

    static void Main()
    {
        string jsonString = @"{
            ""name"": ""John Doe"",
            ""age"": 30,
            ""isStudent"": false,
            ""courses"": [""Math"", ""Science"", ""History""]
        }";

        Person person = JsonConvert.DeserializeObject<Person>(jsonString);

        Console.WriteLine($"Name: {person.Name}");
        Console.WriteLine($"Age: {person.Age}");
        Console.WriteLine($"Is Student: {person.IsStudent}");
        Console.WriteLine("Courses: " + string.Join(", ", person.Courses));
    }
}

この例では、JsonConvert.DeserializeObjectメソッドを使用してJSON文字列をPersonクラスのインスタンスにデシリアライズしています。

オブジェクトをJSON文字列に変換

次に、C#オブジェクトをJSON文字列にシリアライズする方法を見てみましょう。

using System;
using Newtonsoft.Json;

class Program
{
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public bool IsStudent { get; set; }
        public string[] Courses { get; set; }
    }

    static void Main()
    {
        Person person = new Person
        {
            Name = "Jane Doe",
            Age = 25,
            IsStudent = true,
            Courses = new string[] { "Physics", "Chemistry" }
        };

        string jsonString = JsonConvert.SerializeObject(person, Formatting.Indented);
        Console.WriteLine(jsonString);
    }
}

この例では、JsonConvert.SerializeObjectメソッドを使用してPersonクラスのインスタンスをJSON文字列にシリアライズしています。Formatting.Indentedを指定することで、整形されたJSON文字列を生成します。

高度なJSON解析

動的なJSON解析

動的なJSONデータを解析するために、JObjectクラスを使用します。

using System;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main()
    {
        string jsonString = @"{
            ""name"": ""John Doe"",
            ""age"": 30,
            ""isStudent"": false,
            ""courses"": [""Math"", ""Science"", ""History""]
        }";

        JObject jObject = JObject.Parse(jsonString);
        string name = (string)jObject["name"];
        int age = (int)jObject["age"];

        Console.WriteLine($"Name: {name}");
        Console.WriteLine($"Age: {age}");
    }
}

この例では、JObject.Parseメソッドを使用してJSON文字列を解析し、プロパティにアクセスしています。

JSONデータの操作

JSONデータの生成と操作

C#を使用して、JSONデータを生成および操作する方法を説明します。

using System;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main()
    {
        JObject jObject = new JObject
        {
            { "name", "John Doe" },
            { "age", 30 },
            { "isStudent", false },
            { "courses", new JArray("Math", "Science", "History") }
        };

        string jsonString = jObject.ToString();
        Console.WriteLine(jsonString);
    }
}

この例では、JObjectおよびJArrayを使用してJSONデータを生成し、文字列として出力しています。

JSONデータの更新

既存のJSONデータを更新する方法を説明します。

using System;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main()
    {
        string jsonString = @"{
            ""name"": ""John Doe"",
            ""age"": 30,
            ""isStudent"": false,
            ""courses"": [""Math"", ""Science"", ""History""]
        }";

        JObject jObject = JObject.Parse(jsonString);
        jObject["age"] = 31; // 年齢を更新
        jObject["courses"][0] = "Physics"; // コースを更新

        Console.WriteLine(jObject.ToString());
    }
}

この例では、JObjectを使用して既存のJSONデータを解析し、特定のフィールドを更新しています。

まとめ

本記事では、C#を使用したJSONデータの解析方法について解説しました。System.Text.JsonおよびNewtonsoft.Jsonの基本的な使用方法から、JSONデータの生成、解析、更新方法までを紹介しました。これらのライブラリを活用することで、JSONデータを効率的に扱うことができます。今回の内容を参考にして、実際のプロジェクトでJSONデータを活用してみてください。JSONデータの理解と操作技術を習得することで、データのやり取りやAPI連携がスムーズに行えるようになります。

タイトルとURLをコピーしました