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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

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

Node.js

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

JavaScript

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

HTML

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

API

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

Q&A

解決済

3回答

6358閲覧

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

zyunnsalome

総合スコア26

JSON

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

Node.js

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

JavaScript

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

HTML

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

API

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

0グッド

0クリップ

投稿2016/04/13 06:37

編集2016/04/13 07:24

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を通過させるというところに苦戦しております。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/04/13 06:58

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

2016/04/13 07:19

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

回答3

0

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

javascript

1//コントローラ 2 3//apiからjsonを取得してきたとして 4 5$scope.players = json;

html

1<tr ng-repeat="player in players"> 2 <td>{{player.name}}</td> 3 <td>{{player.age}}</td> 4</tr>

投稿2016/04/13 09:53

nnssn

総合スコア1221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zyunnsalome

2016/04/13 10:00 編集

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

2016/04/13 11:10 編集

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

2016/04/13 12:30

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

0

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

JavaScript

1'use strict'; 2(function () { 3 function handleReadystatechange (event) { // XMLHttpRequest Level 1 4 var xhr = event.target, object; 5 6 if (xhr.readyState === 4 && xhr.status === 200) { 7 object = JSON.parse(xhr.responseText); 8 console.dir(object); 9 } 10 } 11 12 function createHandler (_handle, xhr) { 13 return handle (event) { 14 if (event) { 15 event.target = xhr; 16 } else { 17 event = {target: xhr}; 18 } 19 20 _handle.call(xhr, event); 21 }; 22 } 23 24 function handleLoad (event) { // XMLHttpRequest Level 2 25 var xhr = event.target, object; 26 27 if (xhr.status === 200) { 28 object = JSON.parse(xhr.responseText); 29 console.dir(object); 30 } 31 } 32 33 function main () { 34 var xhr = new XMLHttpRequest(); // for IE7+ 35 36 xhr.open('GET', 'data.json', true); 37 38 if (typeof xhr.addEventListener === 'function') { 39 if ('onload' in xhr) { 40 xhr.addEventListener('load', handleLoad, false); 41 } else if ('onreadystatechange' in xhr) { 42 xhr.addEventListener('readystatechange', handleReadystatechange, false); 43 } 44 } else if (typeof xhr.attachEvent === 'function' || typeof xhr.attachEvent === 'object') { // for IE8- 45 if ('onload' in xhr) { 46 xhr.attachEvent('onload', createHandler(handleLoad, xhr)); 47 } else if ('onreadystatechange' in xhr) { 48 xhr.attachEvent('onreadystatechange', createHandler(handleReadystatechange, xhr)); 49 } 50 51 } 52 53 xhr.send(null); 54 } 55 56 main(); 57}());

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

JavaScript

1'use strict'; 2var json = '[{"name":"青木","age":34},{"name":"イチロー","age":41}]', 3 array = JSON.parse(json); 4 5for (var i = 0, l = array.length, object; i < l; ++i) { 6 object = array[i]; 7 console.log(object.name, object.age); 8}

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

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

投稿2016/04/13 07:12

編集2016/04/14 14:21
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zyunnsalome

2016/04/13 07:16

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

2016/04/13 08:38

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

2016/04/13 13:24

すいません。記載いただいた流れで大体イメージは掴めました。ありがとうございます。 かなり基本的な質問になるのですが、配列arrayに入れることになる、JSON.parse()⇐になにを引数として入れたら良いのかよくわかっていないようです。(恐れながら、ちなみにXML HttpRequestははじめてで、見よう見まねでやっている状況です。。) 少し例をあげて教えていただけませんでしょうか? var xhr= new XMLHttpRequest(); //request getting data xhr.open("GET","https://api.・・・・・・"); xhr.send(); array = JSON.parse();
zyunnsalome

2016/04/13 13:26

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

2016/04/14 14:25

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

0

ベストアンサー

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

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

投稿2016/04/14 05:17

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zyunnsalome

2016/04/14 06:17

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問