質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • JavaScript

    17024questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    9287questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Node.js

    1942questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • API

    1563questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • JSON

    1202questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

WEB API をhtmlにテーブル形式で展開する方法

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,412

zyunnsalome

score 17

node.js mongodb html5 angularjs などを使ってAPIを上手く活用するような一連の仕組みを作っているのですが、ネットを探してもわからないところがあり、お力を拝借したく存じます。

個人情報が載ってる関係でその該当リンクをのせることはできないのですが、クラウドサービス上(Paas)に作成したWEB APIのリンクを叩きに行くと、[{name:青木,age:34},{name:イチロー,age:41}]といったいわゆるjson形式でかえってくるのですが、このAPIをtable上に展開しみやすくできるhtmlを作成したいと考えています。

このAPIのデータをとってきてhtml上のtableに展開するというところにかなり苦戦していて、どうして良いかわかりません。

ソースコードなどが載せられず、適切な質問形式ではないかもしれませんが、何かしらのヒントとなるご助言をいただけませんでしょうか?

Heroku Bluemix Salesforceなどで同様の経験のある方とくにお力をおかしいただければと存じます。
イメージはこのサイトでしていることをhtml上で自動的に変換できればという感じです。
http://json2table.com/

WEB APIからのデータ取得にこだわっている背景としては、API Managementのようなサービスを使いユーザーのアクセス制御をかけたいと思っているからです。

直でアプリからmongodbの中の該当データを引っこ抜いてくるというのはできているのですが、制御APIを通過させるというところに苦戦しております。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/04/13 15:58

    JavaScriptでWEB APIからデータを取る、データからテーブルを作る、のどちらもできないのであれば、質問内容はそもそも解決できません。どこがどうわからないのかが全く分からないので、個人情報を書き換えて具体的に記述されてはいかがでしょうか。

    キャンセル

  • zyunnsalome

    2016/04/13 16:19

    ありがとうございます。 WEB APIからMongo DBのデータ一覧を取得するという作業までは完成しています。そのURLを開いた時に出てくるJSONのベタ書きされたテーブルを別のhtml上でtableに展開するというようなことができればいいなというのが今したいことです。

    キャンセル

回答 3

+1

どこまで理解していてどの辺りで詰まっているのが不明ですが、XMLHttpRequest で JSON を取得してください。

'use strict';
(function () {
  function handleReadystatechange (event) { // XMLHttpRequest Level 1
    var xhr = event.target, object;

    if (xhr.readyState === 4 && xhr.status === 200) {
      object = JSON.parse(xhr.responseText);
      console.dir(object);
    }
  }

  function createHandler (_handle, xhr) {
    return handle (event) {
      if (event) {
        event.target = xhr;
      } else {
        event = {target: xhr};
      }

      _handle.call(xhr, event);
    };
  }

  function handleLoad (event) { // XMLHttpRequest Level 2
    var xhr = event.target, object;

    if (xhr.status === 200) {
      object = JSON.parse(xhr.responseText);
      console.dir(object);
    }
  }

  function main () {
    var xhr = new XMLHttpRequest(); //  for IE7+

    xhr.open('GET', 'data.json', true);

    if (typeof xhr.addEventListener === 'function') {
      if ('onload' in xhr) {
        xhr.addEventListener('load', handleLoad, false);
      } else if ('onreadystatechange' in xhr) {
        xhr.addEventListener('readystatechange', handleReadystatechange, false);
      }
    } else if (typeof xhr.attachEvent === 'function' || typeof xhr.attachEvent === 'object') {  // for IE8-
      if ('onload' in xhr) {
        xhr.attachEvent('onload', createHandler(handleLoad, xhr));
      } else if ('onreadystatechange' in xhr) {
        xhr.attachEvent('onreadystatechange', createHandler(handleReadystatechange, xhr));
      }

    }

    xhr.send(null);
  }

  main();
}());

JSON は JSON.parse で展開可能です。

'use strict';
var json = '[{"name":"青木","age":34},{"name":"イチロー","age":41}]',
    array = JSON.parse(json);

for (var i = 0, l = array.length, object; i < l; ++i) {
  object = array[i];
  console.log(object.name, object.age);
}

table要素の生成は次の手順で可能です。

  1. document.createElement('table') でtable要素ノードを生成
  2. thead, tbody, tr, td, th 要素ノードを生成して appendChild (HTMLTable**** の DOM API を利用してもOK)
  3. createTextNode でテキストノードを生成して appendChild もしくは、textContent

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/13 16:16

    ご回答有り難うございます。
    1つの大きな課題として、データが増えたり減ったりしても対応できるようにしたいのですが、var JSON でデータをベタ書きする以外に方法はないのでしょうか?
    ネット上のものを調べると、データ量の増減に対応できそうなものがない状況です。

    これをするとなるとかなり難易度が高いのでしょうか?

    キャンセル

  • 2016/04/13 16:27

    親記事にも書きましたが、XMLHttpRequest を利用してください。
    http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0012
    もしくは JSONP でも構いません。
    http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0011

    キャンセル

  • 2016/04/13 17:38

    ありがとうございます。よく見させていただきます。もし不明点がございましたら質問させていただくかもしれませんが、よろしくお願いいたします。

    キャンセル

  • 2016/04/13 22:24

    すいません。記載いただいた流れで大体イメージは掴めました。ありがとうございます。

    かなり基本的な質問になるのですが、配列arrayに入れることになる、JSON.parse()⇐になにを引数として入れたら良いのかよくわかっていないようです。(恐れながら、ちなみにXML HttpRequestははじめてで、見よう見まねでやっている状況です。。)


    少し例をあげて教えていただけませんでしょうか?

    var xhr= new XMLHttpRequest();

    //request getting data
    xhr.open("GET","https://api.・・・・・・");
    xhr.send();

    array = JSON.parse();

    キャンセル

  • 2016/04/13 22:26

    1から勉強したいところなのですが、時間的に迫られていることもあり、お助けいただけますと非常にありがたいです。

    キャンセル

  • 2016/04/14 23:25

    親記事にコードを追記しました。
    (さすがに3分で読んで作れそうなコードの断片を載せられると「勉強する時間が少なすぎるのではないか」と感じてしまいます)

    キャンセル

+1

AngularJsの名前をあげられていますが、普通にangularで
バインディングするのではダメですか。

//コントローラ

//apiからjsonを取得してきたとして

$scope.players = json;
<tr ng-repeat="player in players">
  <td>{{player.name}}</td>
  <td>{{player.age}}</td>
</tr>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/13 18:57 編集

    ありがとうございます。

    ただ、現在作成したほうがそちらのパターンでして、それでもいいのですが、このやり方だとすべてのデータを出してきたあとにフィルターをかけるイメージになり、負荷が大きくなるということで、サーバー側である程度制御したいと考えております。

    もし勘違いしておりましたら、もう少し詳しく教えていただきたいです。

    キャンセル

  • 2016/04/13 20:08 編集

    apiは常にデータを全件返す作りになっているということですか?もしそうなら、まず先にapi側に取得件数や取得開始位置を指定できる仕組みを作った方が良いと思います。今のままではクライアントでどう工夫しても結局データを全件引き出すことに変わりはないので。検索語句として関係がありそうな物はページネーション limit offsetなどです。

    キャンセル

  • 2016/04/13 21:30

    ありがとうございます。それもしないといけないこととして認識しております。早速調べてみます。ただ、まずは、APIからデータをtableに取得というのが一番のお題目となっていて質問させていただきました。

    キャンセル

checkベストアンサー

0

サーバ上のデータ(の件数を減らす)については置いておいて、HTMLにJSON読込⇒tableで表示ならjQueryを使ったサンプルが多数出てくると思います。
検索:jQuery JSON table

jQuery は内部でXMLHttpRequestを使って通信を実現しています。「なんでもjQueryで!」という事は好きではありませんが、ユーザーが多いため実装例が多数出てくるはずです。
また、表示方法は Angular でバインディングするのとあまり変わりませんので、負荷については良くなることはありません。件数を減らす処理はnnssnさんの言われるように API からの取得時に行うべきでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/14 15:17

    ありがとうございます。
    自分の課題解決には、まず、APIの方の仕様を変更するのが賢明だとわかりました。

    いろいろとありがとうございます。

    キャンセル

関連した質問

  • 解決済

    PHP JSON形式をデータベースに格納するには

    PHP・Mysqlを使いフィールドの情報を取得してJSON形式にして取得するようなことを行っていたのですが、今度は逆にJSON形式の値をMysqlの別のテーブルに格納するにはどうす

  • 解決済

    MongoDBで大量にドキュメントを生成したい

    MongoDBを勉強中です。 ドキュメントを大量に生成したいと思っています。 何か良い方法はありますでしょうか? ご教授お願いします。

  • 解決済

    MongoDBのインストール後接続できない

    初心者です。 MongoDBをVritualBox内のubuntuにインストールして使用したいのですが、うまく接続できず?解決できません。 $ mongo MongoDB she

  • 受付中

    mongoDBのqueryについて

    mongodbにc++からアクセスしています. データベースから値を取り出しているのですが複数の値をqueryとして与え,結果を取り出す場合にはどのようにしたらいいのでしょうか?

  • 解決済

    MongoDBの将来性ってどうなんですか?

    mongoDB、勉強会で「実践に使ってみようと思うんです!」って言うとみんな真顔になって「やめとけ」「死ぬ気か」「悪いことは言わないから」って言うんだけどなんでなんでしょうか・・・

  • 解決済

    service mongod --dbpath /[PATH]/ で起動できない

    MongoDBについて質問です。 起動するとき、dbpathを指定したうえで起動しっぱなしにしてやりたいのですが、 service mongod --dbpath /[PA

  • 解決済

    mongoDB:collectionの中の一部をex || importしたい

    ※mongoについて理解不十分のため、誤記・誤認識等についてご容赦ください。 mongoDBにためているデータがあるのですが、これらをCollectionごとにexport/

  • 受付中

    データベースのライセンスについて

    サーバの勉強をし始め、データを管理するにはMongoDBやMySQLのような組み込みの機能を使うのが一般的だと最近知ったのですが、これらを商用で利用する場合のライセンスはどうなって

同じタグがついた質問を見る

  • JavaScript

    17024questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    9287questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Node.js

    1942questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • API

    1563questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • JSON

    1202questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。