2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】GETリクエストで取得したJSON形式のデータをパースする

Last updated at Posted at 2020-06-06

はじめに

UnityでJSON形式のデータをパースする方法について簡単にまとめました。

環境

Unity : 2017.4.40f1
OS : Windows 10 Home 2004

概要

UnityでJSON形式のデータをパースするには、主に2種類の方法があります。
それは、

の2種類です。

使い分けとしては、MiniJSONはGETリクエスト用、JsonUtilityはそれ以外(自分で用意したJSON形式のデータなど)用でいいと思います。

なぜかというと、MiniJSONとJsonUtilityには大きな違いが一つあるからです。
MiniJSONは、JSON形式の構造を事前に宣言する必要がなく、JsonUtilityは事前に宣言する必要があります。
JSON形式の構造が複雑な場合それを手打ちで書き起こすのは面倒であり、おそらく多くの場合GETリクエストで取得したJSON形式のデータのうち使いたいものは一部分でしょう。
よって、GETリクエストで取得したJSON形式のデータをパースするにはMiniJSONが適しているといえるでしょう。
もちろん、取得したJSON形式のデータが複雑でない場合は、事前にJSON形式の構造を宣言してJsonUtilityを使ってもいいでしょう。

コード

Unityプロジェクトはこちらからダウンロードできます。
https://github.com/GuiltyWorks/GetRequestWithJSON

それでは、実際のコードと実行結果を見ていきましょう。
※MiniJSON.csをアセットに入れておきましょう。
※今回はlivedoorの天気情報APIを叩いています。適宜URLを変えてください。

【2021年7月追記】
※livedoorの天気情報APIは2020年7月にサービスが終了しました。

GetRequestWithJSON.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using MiniJSON;

public class GetRequestWithJSON : MonoBehaviour
{
    public string uri = "http://weather.livedoor.com/forecast/webservice/json/v1?city=130010";

    void Start()
    {
        StartCoroutine(GetRequest(this.uri));
    }

    private IEnumerator GetRequest(string uri)
    {
        Debug.Log("-------- GET Request Start --------");
        using (UnityWebRequest request = UnityWebRequest.Get(uri))
        {
            yield return request.SendWebRequest();
            if (request.isNetworkError || request.isHttpError)
            {
                Debug.Log("GET Request Failure");
                Debug.Log(request.error);
            }
            else
            {
                Debug.Log("GET Request Success");
                Debug.Log(request.downloadHandler.text);
                Dictionary<string, object> response = Json.Deserialize(request.downloadHandler.text) as Dictionary<string, object>;
                Debug.Log(response["title"]);
            }
        }
    }
}

エラーがある場合はエラーを表示し、エラーがない場合はGETリクエストで取得したJSON形式のデータを表示します。

実行結果

json.jpg
json2.jpg

参考文献

公式ドキュメント : UnityWebRequest.Get
JsonUtility をつかって Unity で JSON を取り扱う方法
MiniJSON

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?