読者です 読者をやめる 読者になる 読者になる
WEB拍手ぱちぱちっと
Clap/拍手

01.MENU
Blog  / ブログ
Videos  / 動画
Pictures  / 絵
Game Materials  / 素材
SS(ShortStory)  / 小ネタ

02.MENU
Novels  / 小説
Chat  / チャット
BBS  / 掲示板
Others  / その他
Old Top  / 旧Top

Traffic Jam Products


【Unity】複数あるJSONデータをListで取得しよう【MiniJson】

よくUnityを触っていると「これどうすればいいの!?」にぶつかるのですが、今回はJSONで躓いたのでその辺を書こうと思います。

 

UnityでJSONを使うときはMiniJSONを使っている方も多いかと思います。

例えば…

{"name":"UMR", "score":9990000}

こういった1次的なデータならDictionaryに変更が簡単です。

ですが、以下のようなランキングデータを作ろうとするとどうにもうまくいきません

f:id:m_training:20150906003919p:plain

JSONを使うときは、こういった複数の構造の方がよく使うかと思います。

どうすれば扱いやすい形にできるかな……と、味付けゆで卵を作っているときに考えておりましたw

 

【Unity】複数あるJSONデータをListで取得しよう【MiniJson】

以下のような仕組みでつくっています。

  1. JSONデータをIListにする
  2. IListの中身を一つずつ取り出してDictionary<string, string>にする。
  3. 取り出したDictionaryをListにくっつける
  4. 完成!

今回は私のプログラムの都合上Dictionary<string,string>で取り出してますが、Dictionary<string,object>で取り出して型を変換して使っても良いかもです。

 

0.準備

まずはここからMiniJSONを持ってきましょう。

右側の「Download ZIP」ボタンでダウンロードができます。

 

ダウンロードしたらAssetsの中にPluginsのフォルダを作って、そこにMiniJSON.csをいれましょう。

f:id:m_training:20150906005608p:plain

最後に使うファイルにusingをつけ足します。

f:id:m_training:20150906005649p:plain

 

1. JSONデータをIListにする

これは簡単ですw

ちなみにsourceにはJSONデータが入っています。

public IList decodeJsonString(string source){
                return (IList)Json.Deserialize (source);
        }

 

2.IListの中身を一つずつ取り出してDictionary<string, string>にする

3.取り出したDictionaryをListにくっつける

public List<Dictionary<string, string>> decodeIListToDictionary(IList json){
                List<Dictionary<string, string>> dic = new List<Dictionary<string, string>> ();
                foreach(IDictionary item in json){
                        Dictionary<string, string> d = new Dictionary<string, string> ();
                        //キーをdictionaryに登録する
                        foreach(string key in item.Keys){
                                d.Add (key, (string)item[key]);
                        }
                        dic.Add (d);
                }
                return dic;
        

Dictionary<string,string>の型のListを用意します。

その後、foreachでデータを一つずつ取り出しています。

そして、取り出したデータのキーを取得、取得したキーとデータをDictionaryに入れます。

できたデータはどんどんListに追加して終わりです!

コード

     // **************************json
        //Jsonを受け取ってdictionary<string,string>のListで返す
        public List<Dictionary<string, string>> decodeJson(string source){
                IList json = decodeJsonString (source);
                return decodeIListToDictionary(json);
        }

        /// <summary>
        /// jsonをIList形式にする
        /// </summary>
        /// <returns>The json string.</returns>
        /// <param name="source">Source.</param>
        public IList decodeJsonString(string source){
                return (IList)Json.Deserialize (source);
        }

        /// <summary>
        /// IListからDictionaryに変換する
        /// </summary>
        /// <returns>List<dictionary<string,string>></returns>
        /// <param name="json">Json.</param>
        public List<Dictionary<string, string>> decodeIListToDictionary(IList json){
                List<Dictionary<string, string>> dic = new List<Dictionary<string, string>> ();
                foreach(IDictionary item in json){
                        Dictionary<string, string> d = new Dictionary<string, string> ();
                        //キーをdictionaryに登録する
                        foreach(string key in item.Keys){
                                d.Add (key, (string)item[key]);
                        }
                        dic.Add (d);
                }
                return dic;
        }

 

 

 

Official LINE Account
友だち追加
@hgf7288s