2日目(12⁄2)の記事です。AmCrのメンバーのデータを読み取っていきます。Rustのライブラリのこと)です。吐き出すことをSerializeといいます。easilyPoint構造体のderiveに着目してください。Json->インスタンスへの変換を実装するという効果があります。Detailserde_jsonの機能をもっと詳しく見ていきましょう。ここでは、members.jsonを読み込むことを目標にします。serde_jsonを使うには、cargo.tomlに次のように設定してください。"1.0"ひな形wikiによれば、ここで使われているjsonオブジェクトの形式は、Rustのデータ型を用いて次のように表すことができます。必須ではないパラメーターを表すには、Option<T>を使います。改善パラメーターのリネーム現在のままでは、この構造体はパラメーターがスネークケース(snake_case)で書かれたものにしか対応しません1。パラメーターをリネームして、パスカルケース(PascalCase)に対応させる必要があります。いっても、Rustの方針に逆らって構造体のフィールドをリネームする必要はありません。serde_jsonには、このような場合にリネームを挟んでくれる機能があります。"PascalCase")]です。この表記(アトリビュートといいます)を、適用するstructおよびenumのVariantにつけましょう。表記規則だけでなく、直接パラメーターの名前を変更することもできます。members.jsonの中には一箇所だけ適切なパスカルケースにマッチしない部分がありますので(どうしてそんな仕様にした)そこを訂正しましょう。Option<SNS>,}enumのシリアライズもうひとつ、問題があります。Cluster列挙体です。serde_jsonのデフォルトの挙動では、Jsonオブジェクトに該当する列挙体のバリアントの名前を書かなくてはなりません。{"Active":{"Year":2018,"Members":[]}}に対応します(playground)。{"Year":2018,"Members":[]}に対応させるためには、#[serde(untagged)]というアトリビュートを列挙体に対して使用します(playground)。これで必要なデータ型は完成です。Jsonファイルから読み込む読み取った文字列をserde_json::from_str()に代入するという方法もありますが、ファイルから直接インスタンス化する方法もあります。serde_json::from_reader()を使います。serde_json::from_reader(members_json)?;完成お疲れさまでした。これで、ローカルのmembers.json2を読み取ることのできるRustのプログラムが完成です。途中でわからなくなった人もご心配なく。今回の記事のリポジトリを用意しておきました。serde_usageAdvancedせっかくなので、ローカルのmembers.jsonではなく、github上のものを読み込むようにしてみましょう。reqwestクレートを使います。8自己紹介が掲載されているのは、現役23人・卒業生8人のようです3。こちらもリポジトリを用意しておきました。runで実行できます。serde_usage/advancedおわりserde_jsonには、紹介したものの他にも様々な機能があります。examplesを読んでいるだけでも結構面白いので、みなさんも一度は目を通して、必要な機能を把握しておくとよいかもしれません。