17
25

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.

C# で WebAPI を呼び出して JSON の特定の値を出力させる

Posted at

備忘録として、C# コンソールアプリで、WebAPI を呼び出し、レスポンスで得られた JSON の特定の値を取り出して出力する方法を記載します。

#使用する WebAPI
今回は例として、天気予報を教えてくれる API OpenWeatherAPI を使用します。これは以下サイトで Sign Up すると無料で使用でき東京の天気予報も出力できるのでいろいろ試したいときに便利です。
参考情報 : OpenWeather
image.png
この API でフリーで使用できるものの中に今の天気を出力できる API があります。以下の様なリクエストで天気情報を得ることが来ます。

http://api.openweathermap.org/data/2.5/forecast?q=Tokyo,jp&units=metric&APPID={Your API Key}

この API で得られる JSON は以下のような形になります。

{
    "coord": {
        "lon": 139.69,
        "lat": 35.69
    },
    "weather": [
        {
            "id": 800,
            "main": "Clear",
            "description": "clear sky",
            "icon": "01n"
        }
    ],
    "base": "stations",
    "main": {
        "temp": 15.49,
        "feels_like": 10.92,
        "temp_min": 12.22,
        "temp_max": 17.78,
        "pressure": 1011,
        "humidity": 59
    },
    "visibility": 10000,
    "wind": {
        "speed": 5.7,
        "deg": 240
    },
    "clouds": {
        "all": 0
    },
    "dt": 1586359041,
    "sys": {
        "type": 1,
        "id": 8074,
        "country": "JP",
        "sunrise": 1586376987,
        "sunset": 1586423326
    },
    "timezone": 32400,
    "id": 1850144,
    "name": "Tokyo",
    "cod": 200
}

ではこの出力結果を C# で処理してみます。

#C# で JSON を取り扱う
特定の値を抜き出して文字列を作成し、Console に出力するサンプルコードは以下になります。

using System;
using System.Linq;
using System.Threading.Tasks;
using System.IO;
using System.Net.Http;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Net;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            String url = "http://api.openweathermap.org/data/2.5/weather?q=Tokyo,jp&units=metric&APPID={Your API Key}";
            WebRequest request = WebRequest.Create(url);
            Stream response_stream = request.GetResponse().GetResponseStream();
            StreamReader reader = new StreamReader(response_stream);
            var obj_from_json = JObject.Parse(reader.ReadToEnd());
            var forecast_sum = obj_from_json["weather"][0]["main"];
            var forecast_des = obj_from_json["weather"][0]["description"];
            var forecast_max_temp = obj_from_json["main"]["temp_max"];
            var forecast_min_temp = obj_from_json["main"]["temp_min"];
            var forecast_hum = obj_from_json["main"]["humidity"];
            var forecast_wind = obj_from_json["wind"]["speed"];

            string forecast_output = "Tokyo is " + forecast_sum + " now. Description is " + forecast_des + ". Max tempreture is " + forecast_max_temp
                + "℃. Min tempreture is " + forecast_min_temp + "℃. Humidity is " + forecast_hum + "%. Wind is " + forecast_wind + "m/s. Have a good day!";
            Console.WriteLine(forecast_output);

        }
    }
}

出力結果は以下になります。
image.png
非常に単純なプログラムですが、JSON を扱いなれていないと以外と引っ掛かります。個人的な考えですが、WebAPI で 取得した JSON の特定の値を取り出す際は、まずは JSON 整形サイトで値のキーを確認するのが便利です。
例えば JSON 整形サイトは以下の様なものがあります。
参考情報 : JSON Pretty Linter Ver3
このサイトでは API で得られた JSON を読み込ませると、得られた値のキーを教えてくれます。例えば今回の API で得られた JSON を以下の様に貼り付けてみます。
image.png
すると、画面したの Viewer にキー付きの整形された JSON が出てきます。これは非常に便利です。
image.png
こういった JSON 整形 Website を使用すると、より分かりやすく JSON を扱うことができるのではないでしょうか。
以上、簡単な備忘録でした。

17
25
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
17
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?