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

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

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

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

Q&A

解決済

3回答

1054閲覧

JSでの複数オブジェクトのデータ取得

Nitta

総合スコア96

JavaScript

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

0グッド

0クリップ

投稿2020/01/20 04:22

編集2020/01/20 05:09

お世話になってます。
以下のようなJSON形式のデータがあった場合、
個別にデータ取得する場合、どうすれば良いのでしょうか?

var data = [{"a":"ehime","b":"kagawa"},{"a":"kochi","b":"tokusima"}];

試したこと

data.foreach(function(value){
console.log(value.a);
console.log(value.b);
});
結果⇒『foreachは関数ではありません。』


console.log(data[0].a);
結果⇒『objectは定義されてません。』

最終的には

res>>"ehime","kagawa"

という出力にできればありがたいです。

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

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

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

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

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

thyda.eiqau

2020/01/20 04:26

最終的に、どのような形になってほしいのでしょうか?
m.ts10806

2020/01/20 04:33

丸投げ-1 ヘルプ全部読んで出直してとお願いしたはずですが?
Nitta

2020/01/20 04:33

上記に記載し直しました。分かりにくいでしょうか?
m.ts10806

2020/01/20 04:40

質問ではなく作業依頼という話ですけど? 自分では何も調べず考えず前の質問から間をおかず丸投げしている自覚はないんですか? この質問内容で丸投げじゃないって主張はどこにいっても通りませんよ。 だからヘルプ全部読んで出直してきてください、と言ってます。 わからないようなので、これにて。
miyabi-sun

2020/01/20 04:42

そもそもこれJSONではなくオブジェクトの配列ですし、JSONとして見るなら文法エラーです。 また基本的にはオブジェクトの配列を返す場合、 子要素のキーがここまでバラバラだとまともに扱う事は困難です。 また、BeforeはありますがAfterが無いのが致命的です。 「データ取得」というのは「大雑把に渡されたデータ郡の中から自分が使いたい情報」以外を捨てるという行為です。 何が欲しいのか、何が不要だから捨てたいのかが記載されて無ければ何も出来ません。 この辺をしっかり書くのはないがしろにされがちですが、 とても高度な技術ですので、まず本質問文を編集しながら出来すぎな位の例題作りを頑張ってみてください。
Nitta

2020/01/20 04:49

子要素のkeyはaとbのみです。 それらを個別に取得したいというだけなんですが?
m.ts10806

2020/01/20 04:57 編集

エラーについて調べず、ドキュメント確認せずに雑にやっといて半ギレのように返されても、ちょっと。
guest

回答3

0

dataが、質問文定義にある通り配列であるという保証があると仮定して回答いたします。
(json取得なら、おそらく配列ではないので、違う形式での処理が必要)

javascript

1data.forEach(val => { 2 // 配列内オブジェクトが一個一個valに入る 3 // 以下、個々のオブジェクトに対して処理 4});

しかし、上記の場合は、参照がforEachメソッド内のため、forEachメソッド外の参照変数に代入したい場合は、処理によっては動作しないでしょう。
外の参照変数に値を代入したい場合、いくつか方法がありますが、下記でいかがでしょうか。
(data内が動的に数などが変動すると想定)

javascript

1var data = [{"a":"ehime","b":"kagawa"},{a:"kochi","b":"tokusima"}]; 2 3// Webブラウザで動作させる想定とする 4for(let i = 1; i <= data.length; i++) { 5 window['data' + i] = null; 6} 7 8data.forEach((val, index) => { 9 const indexInner = index + 1; 10 window['data' + indexInner] = val; 11}); 12 13// 以下の処理にて、data1、data2...を使用可能 14console.log(data1);

分割代入とか駆使すれば、もっと短く、書きやすい構文ができるかもしれません。

投稿2020/01/20 05:12

miyabi_takatsuk

総合スコア9555

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

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

Nitta

2020/01/20 05:43

miyabi_takatsuk様 ありがとうございました。見事に出力することができました。 丁寧な解説本当に感謝致します。 ご迷惑をお掛けしすいませんでした。 極力控えるように致します。 今回はありがとうございました。
miyabi_takatsuk

2020/01/20 05:50

解決されて何よりです。 ただ、もう少し、JavaScriptの基礎から、勉強された方がいいのかな?とお見受けします。 特に、言語においての同処理に対してのメソッド名の違い、[]と{}の違い、演算子や、オブジェクトや、プリミティブのデータ型に対しての、仕様と性質など。 上記に関しては、言語によって、仕様が異なってきますので、他の言語と同じ書き方、使い方では動作しない場合が多いです。 (共通の使い方である場合ももちろんある) 本とかを読み、基礎から再度勉強されるといいかと思います。
Nitta

2020/01/20 06:14

miyabi_takatsuk様 有難いお言葉感謝します。 実際、色々勉強はし直したいと考えてますが、 時間的な部分が取れきれないところはあります。 必ず一段落したら実施する予定です。 ありがとうございました。
guest

0

ベストアンサー

こんにちは

ご質問に挙げられている、「試したこと」の①と②については、以下のように修正するとよいかと思います。

① foreach を forEach に修正

javascript

1data.forEach(function(value){ 2 console.log(value.a); 3 console.log(value.b); 4});

② (0) を [0] に修正

javascript

1console.log(data[0].a);

投稿2020/01/20 05:02

jun68ykt

総合スコア9058

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

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

Nitta

2020/01/20 05:23 編集

返信ありがとうございます。 console.log(data[0].a); undefineになります。何故なんでしょうか?
jun68ykt

2020/01/20 05:10

なるほど。 では .a を除いて、 console.log(data[0]); だと、どのようにconsole に出力されますか?
miyabi_takatsuk

2020/01/20 05:11

横槍すみません。 Nittaさん、m.ts10806さんから言われたこと、なんも生かせてないと思いますよ。 そこから直した方がよいと思いますよ。
Nitta

2020/01/20 05:15

data[0]は『[』と出力されるだけですね。何故なのか? >>miyabi_takatsukさん いえ、それはわかってます。しかし、今日までにやらないと不味いんです。
miyabi_takatsuk

2020/01/20 05:18

私が申し上げているのは、 > undefineになります。色々やりはしましたが~? についてです。 友達じゃないんだから、とツッコミが入ると思います。 語尾や文体など、相手は赤の他人である以上、円滑にやりとりするするには、気をつけるべきかと思います。 そして、その気を付ける部分は、時間が少なくとも、できる部分だと、私は考えます。
jun68ykt

2020/01/20 05:29

@Nittaさん > data[0]は『[』と出力されるだけですね。何故なのか? そういうことだと、おそらく data はJSONの文字列なのでしょう。 以下のサンプル https://codepen.io/jun68ykt/pen/abzQBGY?editors=0012 のように、forEach でループさせる前に data = JSON.parse(data); という行を追加してみると、いかがでしょう?
m.ts10806

2020/01/20 05:32 編集

>今日までにやらないと不味いんです。 そんなの赤の他人のこと、知ったこっちゃない。 丸投げしていい理由になりませんね。 どうしてもで自分ではできなくて急ぎなら業者に出してください。 あなたのかわりに作業を請け負う場所ではありません。
Nitta

2020/01/20 05:36

jun68yk様 お世話になってます。見事出力できました。 一度、parseはしたんですが配列の持って行き方が 不味かったようです。 有難い解説ありがとうございました。
Nitta

2020/01/20 05:38

m.ts10806様 すいません。色々解説頂けるtetailの素晴らしさに 申し訳ございません。
m.ts10806

2020/01/20 05:41 編集

「tetail」では丸投げが許されるのかもしれませんが、「teratail」では非推奨行為です。 あと、定型文しかないなら返さなくて結構ですよ。
jun68ykt

2020/01/20 05:48

@Nittaさん どういたしまして。解決されたようでよかったです????
Nitta

2020/01/20 05:48

m.ts10806様 大変お世話なりました。 この本日の対応に関して深く反省しています。 ご無礼をお許しください。
m.ts10806

2020/01/20 05:51

定型文しかないなら返さなくて結構ですよ。 謝ったところで同じ行為を続ければ反省しているとは誰もみませんし、嘘つきです。
Nitta

2020/01/20 06:15

m.ts10806様 厳しいお言葉ですが、言われてらっしゃる事に 間違いはございません。 肝に銘じて邁進いたします。 また、よろしくお願いいたします。
m.ts10806

2020/01/20 06:26 編集

定型文しかないなら返さなくて結構ですよ。 直前の質問であれだけやりとりしておきながらなお、「今日までにやらないと不味いんです。 」なんて言って別のコメントで半ギレしてるようではどんな弁ももはやどこからからのコピペの印象にしかなりませんね。言葉より行動で示せないんだから。
guest

0

単独の場合は
data.key
二次元の場合
data[index].key
とかですかね。

indexは、data.lengthで求めて
for等で回せばOKかと

投稿2020/01/20 04:30

編集2020/01/20 04:36
NEO_PLANETT-777

総合スコア333

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

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

Nitta

2020/01/20 04:53 編集

data.lengthが229になり、無理そうです。 data.keyもundefineになってしまいます。
NEO_PLANETT-777

2020/01/20 05:06

data.keyってkeyじゃないですからね。 data.a とかって事ですよ。
Nitta

2020/01/20 05:23 編集

当然です。それで対処しましたが上手くいきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問