はじめに
JSON(JavaScript Object Notation)は、データの交換形式として広く使用されています。シンプルで読みやすく、プログラム間でのデータのやり取りに最適です。C#では、JSONデータを解析するためのライブラリが豊富に用意されています。本記事では、C#を使ったJSONデータの解析方法について、具体的な例を交えながら解説します。初心者の方でも理解しやすいように、基本的な解析方法から実践的な応用例までを順を追って説明します。
JSONデータの基本
JSONとは?
JSONは、キーと値のペアで構成されるデータフォーマットです。以下に、JSONデータのシンプルな例を示します。
{
"name": "John Doe",
"age": 30,
"isStudent": false,
"courses": ["Math", "Science", "History"]
}
この例では、name
、age
、isStudent
、courses
というキーが存在し、それぞれに対応する値が設定されています。
C#でのJSON解析ライブラリ
C#でJSONデータを解析するための主要なライブラリとして、以下の2つがよく使用されます。
System.Text.Json
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連携がスムーズに行えるようになります。