JSON形式のデータを Unityで取り扱う場合、通常 Unity標準の JsonUtilityを使用します。この JsonUtilityを使用して JSONファイルを読み込む方法は以前解説しました。
そして、今回は ジャグ配列(配列内配列)を含む JSONファイルの取り扱いを説明します。と言うのは、上記の JsonUtilityはジャグ配列を扱えません。そこで、ここでは Unityでジャグ配列が扱える LitJSON と言うライブラリの使用法を解説します。

自分で JSONの構造を設計できるのであればジャグ配列のない形式にして JsonUtilityの使用もできます。しかし、外部の既存システムなんかへの接続の場合、既にフォーマットが指定されている場合が多々あります。
私も元々 JSONファイルへのアクセスは JsonUtilityを使ってましたが、外部の既存システム接続の際、相手側のレスポンスJSON形式を見て、これは JsonUtilityでは無理だ。。。と LitJSONを使用した経緯です。
私も元々 JSONファイルへのアクセスは JsonUtilityを使ってましたが、外部の既存システム接続の際、相手側のレスポンスJSON形式を見て、これは JsonUtilityでは無理だ。。。と LitJSONを使用した経緯です。
【ジャグ配列(配列内配列)とは】
まず、そもそもジャグ配列とは何か??
ジャグ配列(Jagged Array)(配列内配列)とは文字通り配列の配列のことです。書いてみると次のような感じ。
[[1, 2, 3], [4, 5, 6, 7], [8, 9], [10, 11, 12]]
正に配列の中の個々の値部分が配列になってます。
特徴的なのは、内側の配列の要素数がそれぞれ異なってる可能性もあります。そのため、不規則配列とも言います。上記の例では、最初の要素数は3つ、次は4つ、2つ、3つとなっておりそれぞれ異なっています。
これに対し、この内側の配列の要素数が同じ配列を矩形配列とも呼ばれます。
【Unityでジャグ配列を使用してみる】
Unityでジャグ配列を定義し、使ってみましょう。ここで使用する例は次のようなジャグ配列です。
[[1, 2, 3], [4, 5, 6, 7], [8, 9, 10]]
これを Unity(C#)で表現すると次の様になります。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class JSON_Test01 : MonoBehaviour { void Start() { // ジャグ配列の定義 int[][] jaggedArray; // ジャグ配列の初期化 jaggedArray = new int[3][]; jaggedArray[0] = new int[] { 1, 2, 3}; jaggedArray[1] = new int[] { 4, 5, 6, 7}; jaggedArray[2] = new int[] { 8, 9, 10 }; for (int i = 0; i < jaggedArray.Length; i++) { int j = 0; foreach (var intValue in jaggedArray[i]) { Debug.Log("[" + i + "," + j + "]: " + intValue); j++; } } } }
【ソース解説】
① :ジャグ配列の定義の方法は次の様になります。

(ちなみに多次元配列だと「 int[ , ] 」と言うような形になります。)
② :ジャグ配列の初期化方法は以下のような形でできます。
外側の配列の初期化をしてから、内側の配列の初期化を行います。
外側の配列の初期化をしてから、内側の配列の初期化を行います。

そして、上記プログラムの実行結果は以下の様になります。

【Unityでジャグ配列を含むJSONの使用】
通常 Unityで JSONを取り扱う場合、Unity標準の「JsonUtility」を使います。Unity標準であるため、Import等の下準備もなく使い始められます。
そして、処理速度もダントツに速いとのこと。「簡単なJSONをさらっと取り込みたい」「複雑だけど速さ重視でJSONを使用したい」なんて時は迷わず JsonUtilityを使えば良いと思います。
使用法は以前解説しました。
しかし、JsonUtilityは最初に JSONの構造を Classで定義しなければならないのが面倒でもあります。何階層にもなって複雑な JSONを事前に Class定義するのは確かに面倒です。
あと、大きな問題として、今回の記事のテーマになっているジャグ配列が取り扱えません。Classで定義する必要があるのでこの問題が出てくるのかと思いますが。
自分でJSONの構造を決められるのであれば、そもそもジャグ配列を含まない形で設計するのも良いかと思います。しかし、外部システムとの統合のように、既に他で JSONの構造が決められてしまっている場合は従うしかありません。
そんな場合に利用できるのが「LitJSON」です。こちらはジャグ配列を含むJSONファイルを取り扱うことができます。
そして、事前に Class定義の必要もないので楽です。
ではなぜ最初からこちらが使われてないかと言うと、Unity標準ではないので GitHubからライブラリをダウンロードする必要があるわけです。また、処理速度は Classで構造を事前定義されている JsonUtilityにはかないません。
ですので、JsonUtilityで苦労せずできる場合は JsonUtilityを使用。そして、JsonUtilityで問題がある場合は LitJSONを使用すれば良いかと思います。
では、今回はここまでにして、次回、この LitJSONの使用法を説明していきます。
Sponsored Link