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

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

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

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

JavaScript

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

Q&A

解決済

2回答

7012閲覧

【JavaScript】連想配列内の複数値を取得

asakura

総合スコア29

JSON

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

JavaScript

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

0グッド

0クリップ

投稿2018/02/17 10:34

JSON形式の連想配列に複数行格納されている値を一括取得したいと思い、
なかなか、うまく行きません。
どのようにしたら良いか、お教え頂けないでしょうか。

データ構造は以下です。
Items: [{
datetime: { S: '2018/2/10 18:19:28' },
contents: { S: 'テストコメント1' },
name: { S: '山田太郎' },
sender_id: { S: '10' },
code: { S: '1000' },
management_id: { S: '100' }
}, {
send_datetime: { S: '2018/2/10 18:19:53' },
contents: { S: 'テストコメント2' },
name: { S: '山田次郎' },
sender_id: { S: '11' },
code: { S: '1000' },
management_id: { S: '100' }
}]

以下のように出力したいと考えています。
2018/2/10 18:19:28,テストコメント1,山田太郎,10,1000,100
2018/2/10 18:19:53,テストコメント2,山田次郎,11,1000,100

よろしくお願いします。

js

1// データセット 2 array0 = { 3 Items: [{ 4 datetime: { S: '2018/2/10 18:19:28' }, 5 contents: { S: 'テストコメント1' }, 6 name: { S: '山田太郎' }, 7 sender_id: { S: '10' }, 8 code: { S: '1000' }, 9 management_id: { S: '100' } 10 }, { 11 send_datetime: { S: '2018/2/10 18:19:53' }, 12 contents: { S: 'テストコメント2' }, 13 name: { S: '山田次郎' }, 14 sender_id: { S: '11' }, 15 code: { S: '1000' }, 16 management_id: { S: '100' } 17 }] 18 }; 19 20// 1件ずつ取り出す 21 for (i = 0; i < array0.Items.length; i++) { 22 // console.log(array0.Items[i]) 23 24// 1件ずつ値を取り出したい 25 for (key0 in array0.Items[i]) { 26 // console.log(array0.Items[i].contents[key0]); 27 } 28 }

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。
以下のような解を考えてみました。

https://jsfiddle.net/jun68ykt/rg5nt6up/38/

実行結果は、右下の firebug の Consoleに出力されます。

以下、コードの補足説明です。

var keys は、値を取り出したい順番に、要素のプロパティを並べた配列です。

https://teratail.com/questions/113140
の回答にも書いたように、オブジェクトのプロパティには
順序がないと考えたほうがよく、ソースコードに書いた順番に
列挙できると思わないほうが安全なので、取り出したい順番を
明示的に指定するために、この配列keysを作っています。

また、日時が値として入っているプロパティが
datetime

send_datetime
の2つあるために、formatter 関数の中で

javascript

1 return keys 2 .map(function(key) { return e[key] ? e[key].S : null; }) 3 .filter(function(e) { return !!e; }) 4 .join();

としていますが、もし、たとえば datetime だけならば

javascript

1 return keys 2 .map(function(key) { return e[key].S; }) 3 .join();

で済みます。

以上参考になりましたら幸いです。

投稿2018/02/17 11:28

編集2018/02/17 13:29
jun68ykt

総合スコア9058

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

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

asakura

2018/02/17 12:08

ありがとうございます! まさに取得したかった形です。 非常に助かりました。
jun68ykt

2018/02/17 12:13

解決されたようですね、よかったです!
asakura

2018/02/17 12:38

ちなみに、それぞれの値を変数に代入する場合は、 どのようにすれば良いのでしょうか。 お聞きしてばかりで、すみません。
guest

0

javascript

1array0.Items[i][key0]

で取得できるかと思います。

javascript

1// 1件ずつ取り出す 2for (i = 0; i < array0.Items.length; i++) { 3 //console.log(array0.Items[i]) 4 5// 1件ずつ値を取り出したい 6 for (key0 in array0.Items[i]) { 7 8 console.log(array0.Items[i][key0]); 9 } 10}

datetime, send_datetimeと配列のキーが気になりますが…

ちなみに、似ている質問ありました。
こちらでも収穫あれば幸いです。
https://teratail.com/questions/45960

投稿2018/02/17 11:04

kszk311

総合スコア3404

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

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

asakura

2018/02/17 12:02

混乱させてしまい、すみません。 send_datetimeは記述ミスで実際にはdatetimeのみです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問