C#でJSONを変換するプログラムを実装しようと思ったところ、最近はほとんどmacOSを使って開発をしていたため、macで試してみました。
macOSでC#の開発というと、まず違和感を感じますが、MAUIというマルチプラットホームのライブラリが出たり、VisualStudio for Macがサポートされないことになったり、環境に変化があるため、ちょっとやっておこうと思いました。(まずはコンソールアプリの動作確認。その後MAUI)
UnityはC#
https://decode.red/net/archives/844
かなり前にWindows以外でC#を試したときは、下記のようにmonoを使いました。
http://crossframe.iiv.jp/?s=mono
VS Code / macOS を使ったC#の開発は初めてでしたので、いろいろメモすることも目的です。
インストールファイル
dotnet-sdk-8.0.408-osx-arm64.pkg (205,144,863 バイト)
VS Codeや、Xcodeはすでに入っているものとします。(要マイクロソフトまたはGithubアカウント)
コマンドから新規プロジェクトを作成できます。(コンソールプロジェクト)
Program.cs
1 2 3 4 5 6 7 8 9 10 11 |
class Program { static void Main() { // JSON → CSV JsonToCsvConverter.Convert("input.json", "output.csv"); // CSV → JSON CsvToJsonConverter.Convert("input.csv", "output.json"); } } |
input.json
1 2 3 4 5 |
[ { "Name": "Alice", "Age": "30", "City": "Tokyo" }, { "Name": "Bob", "Age": "25", "City": "Osaka" }, { "Name": "Charlie", "Age": "35", "City": "Kyoto" } ] |
input.csv
1 2 3 4 |
Name,Age,City Alice,30,Tokyo Bob,25,Osaka Charlie,35,Kyoto |
JsonToCsv.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using System; using System.Collections.Generic; using System.IO; using System.Text; using Newtonsoft.Json; using Newtonsoft.Json.Linq; class JsonToCsvConverter { public static void Convert(string jsonFilePath, string csvFilePath) { var json = File.ReadAllText(jsonFilePath); var array = JArray.Parse(json); var sb = new StringBuilder(); // ヘッダー var headers = ((JObject)array[0]).Properties(); sb.AppendLine(string.Join(",", headers.Select(h => h.Name))); // データ foreach (var obj in array) { var values = ((JObject)obj).Properties().Select(p => p.Value.ToString()); sb.AppendLine(string.Join(",", values)); } File.WriteAllText(csvFilePath, sb.ToString()); } } |
CsvToJson.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
using System; using System.Collections.Generic; using System.IO; using Newtonsoft.Json; class CsvToJsonConverter { public static void Convert(string csvFilePath, string jsonFilePath) { var lines = File.ReadAllLines(csvFilePath); var headers = lines[0].Split(','); var jsonList = new List<Dictionary<string, string>>(); for (int i = 1; i < lines.Length; i++) { var values = lines[i].Split(','); var dict = new Dictionary<string, string>(); for (int j = 0; j < headers.Length; j++) { dict[headers[j]] = values[j]; } jsonList.Add(dict); } var json = JsonConvert.SerializeObject(jsonList, Formatting.Indented); File.WriteAllText(jsonFilePath, json); } } |
ファイル構成
パッケージインストールと実行
dotnet add package Newtonsoft.Json
dotnet run
ビルドはVSCodeの三角ボタンから(やり方はいろいろあり)
JSONは今後 System.Text.Jsonを使うことになりそうです。
https://learn.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json/migrate-from-newtonsoft?pivots=dotnet-9-0
次にMAUIも試してみました。(サンプルプログラムのビルドと実行)
workloadのインストール
sudo dotnet workload install maui
dotnet workload list
実行
dotnet run
参考)https://qiita.com/aqua_ix/items/ba9533d60633abe4c850