C#のLINQでJSONを編集してみる

最近学校の制作でちょっとマイブームのC#

今回はWebからjsonを取得して、それをLINQを使って参照したり編集したり、してみます。

LINQとは

  1. C#3.0から追加
  2. RDBやXMLへの操作をプログラミング言語の構文でサポート(ちょっと言い方間違ってるかも)
  3. select from whereなど、SQL文のような書き方ができる。

そんな感じ。わざわざ今更ブログに取り上げるような新機能ではないかもしれませんが、
僕は初めて利用したのでメモしておきます。

JSONをC#で扱う

多分様々な方法があると思いますが、今回はぐぐって一番最初に出てきたJSON.NETという外部ライブラリを
利用します。

公式ホームページからダウンロードして、参照追加しても良し、NuGet(.NETのライブラリマネージャ、rubyでいうgemとbundleみたいな)
でインストールしてもよしです。

なにをするか

  1. HeartRails Expressで無料公開されているAPIから山手線の情報を取得
  2. JSON.NETを利用して取得した文字列をjsonとしてパースし、オブジェクトに代入
  3. オブジェクトに対してLINQを使って、絞り込んだり、追加したりする

これだけです。環境は

  • C#5.0
  • JSON.NET 4.5

第一段階 APIにHTTP.GETリクエストを送ってレスポンスを取得する

  • using System.NET;
  • using System.IO;

が必要です。

これで標準出力に取得したjsonがString型として出力されています。
もっと簡単な方法ないかな・・・

第二段階 取得した結果をjsonとしてパースする

JSON.NETのインストールが済んだうえで

  • using Newtonsoft.Json;
  • using Newtonsoft.Json.Linq;

が必要です。

プログラム自体は1行だけ。文字列をjsonとしてパースしてオブジェクトにして返してくれます。

第三段階 オブジェクトに対してLINQを利用してなんかする

最後はLINQを使っていきます。リファレンスには色々書いてあって、多機能で怖い感じも
しますが、基本はSQLライクな構文。

今回は取得したjsonの中から、駅名に『町』の文字が含まれる駅データだけを抽出してみます。

selectやfromなど、SQLを知っていれば、登場する順番は違いますが、
キーワード自体は馴染みのあるものが多いと思います。

個人的に『んー、ほしいなぁ』とおもったのはlikeですね。これはこのサンプルでは
String型のContainsメソッドで実現していますが、where句はbool値を返す処理なら
なんでも良さそうなので、独自でフィルターを定義することも簡単そうです。

あとは出力してみる

連想配列になっているので、あとは簡単。御徒町、有楽町、浜松町、田町
が出力されてると思います。

サンプル全景

おわりです。

ついでにdynamic

※この項は補足です、タイトルには直接関係ありません。型推論のvarを調べてたら見つけたのでメモ

  1. C#4.0で追加
  2. 動的型付け変数が利用できる、ってこと。(pythonやphpの変数みたいに、実行時に変数の型が決まる変数)
  3. 型推論であるvarキーワード(C#3.0 で追加)とは別

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です