1
1

More than 3 years have passed since last update.

Node.jsでAPIから取得したJSON(ネストあり)を扱う

Last updated at Posted at 2020-05-14

メディア芸術データベースのAPIを使用してJSONデータを取得したものの、Node.jsでネストありのJSONデータを扱う方法に少し手間取ったため備忘録。
Node.jsでAPIデータ取得→ネストありのJSONデータの扱いについての記事がなかったため残します。

メディア芸術データベース

文化庁がマンガやアニメ、ゲームといったメディア作品の情報を保存し、ベータ版としてデータベースを公開している。

  • 検索サイト

https://mediaarts-db.bunka.go.jp/

  • データベースについて

https://mediaarts-db.bunka.go.jp/about#anc02

APIで取得したJSONの形式

saenai-heroine-no-sodatekata.json
{"hitnum":1,
"record":[{"fieldId":"animation",
           "categoryId":"an-col",
           "subcategoryId":"an207",
           "aipId":"C15461",
           "metadata":{"rdf:type":["Collection"],
                       "schema:additionalType":["an"],
                       "schema:genre":["テレビレギュラーアニメシリーズ"],
                       "schema:name":["冴えない彼女*の 育てかた[ヒロイン]"],
                       "schema:name xml:lang=\"ja-Hrkt\"":["サエナイヒロインノソダテカタ","サエナイカノジョノソダテカタ"],
                       "schema:creator":["[監督]亀井幹太"],
                       "schema:contributor":["[シリーズ構成]丸戸史明 / [監督]亀井幹太 / [キャラクターテザイン] / [キャラクターテザイン、総作画監督]高瀬智章 / [美術監督]日下部夏月 / [美術設定]綱頭瑛子 / [音響監督]藤田亜紀子 / [音楽]百石元(F.M.F) / [アニメーション制作]A-1 Pictures / [制作]冴えない製作委員会 / [制作]アニプレックス / [制作]フジテレビジョン / [制作]KADOKAWA富士見書房BC / [制作]京楽産業ホールディングス / [制作]関西テレビ放送 / [制作]電通 / [制作]グッドスマイルカンパニー / [制作]コスパ"],
                       "schema:actor":["【安芸倫也】松岡禎丞 / 【澤村・スペンサー・英梨々】大西沙織 / 【霞ヶ丘詩羽】茅野愛衣 / 【加藤恵】安野希世乃 / 【氷堂美智留】矢作紗友里 / 【波島伊織】柿原徹也 / 【波島出海】赤崎*千夏 / 【石巻基予】大地葉 / 【里見梓】奥野香耶 / 【上郷喜彦】内田雄馬 / 【町田苑子】桑島法子 / 【加藤圭一】斉藤壮馬 / 【澤村小百合】中原麻衣 / 【水原叡智佳】田辺留依 / 【姫川時乃】鈴木絵理 / 【森丘藍子】大地葉"],
                       "schema:publisher":["CX"],
                       "schema:datePublished":["2015-01-09"],
                       "schema:startDate":["2015-01-09"],
                       "schema:endDate":["2015-03-27"],
                       "ma:type":["レギュラー"],
                       "schema:isPartOf":["C5951"],
                       "ma:media":["TVレギュラー"],
                       "ma:Effect":["アニメ"],
                       "ma:periodDisplayed":["00時50分 / フジテレビで放映 / 30分枠"],
                       "ma:runtime":["30分"],
                       "ma:volumeNumber":["13"],
                       "ma:originalCreator":["[原作]丸戸史明"],
                       "ma:contributor":["[アニメーション制作]A-1 Pictures / [制作]冴えない製作委員会 / [制作]アニプレックス / [制作]フジテレビジョン / [制作]KADOKAWA富士見書房BC / [制作]京楽産業ホールディングス / [制作]関西テレビ放送 / [制作]電通 / [制作]グッドスマイルカンパニー / [制作]コスパ"],
                       "ma:source":["CRNT2015(カレント2015新規登録)"],
                       "madbdata:oldDateModified":["2016-04-01T11:44:40"]}
                      }
          ]
}

メディア芸術データベースで1件だけヒットさせた結果が上記の通りである。
「"record"」キー配下に検索でヒットした結果のレコードが配列的に格納される。

この記事では、「"record"」キー配下の「"metadata"」の中の「"schema:name"」のValueを扱いたい!みたいな時のやり方の備忘録である。

Node.js(express)のコード(APIで取得→配列に格納→コンソール出力)

index.js
const express = require('express');
const bodyParser = require('body-parser');
const https = require('https');

// define the Express app
const app = express();

//メディア芸術データベースAPIのURL
const mediaartsdbAPI = 'https://mediaarts-db.bunka.go.jp/api/search?aipId=C15461';

// use bodyParser to parse application/json content-type
app.use(bodyParser.json());

// アプリケーションの「http://localhost:4000/」にアクセスすると、メディア芸術データベースへHTTPでGETしにいく。
app.get('/', (req, res) => {
    //GETしたJSON(バイナリ)をテキスト化&JSONパースし格納するための変数。
    let mediaartsdbRec1 = '';
    //「"record"」配下の要素を格納するための配列。
    let mediaartsdbRec2 = [];

    const mediaartsdbGet = https.request(mediaartsdbAPI, (res) => {
        let buf = [];
        res.on('data', (chunk) => {
            buf.push(chunk);
            //bufにはバイナリの配列の形でJSONが格納される。
        });
        res.on('end', () => {
            //バイナリをテキスト化し、それをJSONパースする。
            mediaartsdbRec1 = JSON.parse(buf.toString());

            //「"record"」の要素を配列に格納していく。
            for (j in mediaartsdbRec1['record']){
                mediaartsdbRec2.push(mediaartsdbRec1['record'][j]);
            }
            console.log(mediaartsdbRec2[0]['metadata']['schema:name']);
            console.log('JSONデータは以上です。');
        });
    })
    mediaartsdbGet.on('error', (e) => {
        console.error(`エラーが出ました: ${e.message}`);
      });
    mediaartsdbGet.end();
    res.send(mediaartsdbRec2);
});

// start the server
app.listen(4000, () => {
  console.log('listening on port 4000');
});

/App/backend # node src
listening on port 4000
[ '冴えない彼女*の 育てかた[ヒロイン]' ]
JSONデータは以上です。

「"record"」キー配下の「"metadata"」の中の「"schema:name"」のValueをconsole.logで表示できました。
あとは同じようにして変数に入れるなりすれば活用できるかと。

1
1
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
1
1