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

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

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

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

JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

490閲覧

JSONのデータのアクセス方法が知りたい

www-www

総合スコア12

JSON

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

JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2018/08/19 16:27

下記サイトのJSONファイルから情報を取得したいと思っています。
https://worldcup.sfg.io/matches
JSONにアクセスし、mapで回して、情報を表示するというシンプルなものです。

ただ、オブジェクトの中にある配列?(表現が間違っていたらすみません。)へのアクセス方法がわかりません。
具体的には、home_team_events> timeにアクセスしたいのですが、できません。
下記のコードでは、<MatchTexts>{item.home_team_events.time}</MatchTexts>というように試していますが、これではだめでした。

よろしくお願いします。

json

1class App extends Component { 2 constructor(){ 3 super(); 4 this.state = { 5 matchDatas:[] 6 }; 7 } 8 componentWillMount(){ 9 const request = axios.create({ 10 baseURL: 'https://worldcup.sfg.io/' 11 }) 12 request.get('/matches') 13 .then(res => { 14 this.setState({ 15 matchDatas: res.data 16 }); 17 }) 18 } 19 render() { 20 return ( 21 <Fragment> 22 {this.state.matchDatas.map((item, index) => ( 23 <MatchItem key={index}> 24 <TeamWrap> 25 <Team>{item.home_team_country}</Team> 26 </TeamWrap> 27 <StatsWrap> 28 <MatchHeading>Stats</MatchHeading> 29 <GoalWrap> 30 <Goal>{item.home_team.goals}</Goal> 31 </GoalWrap> 32 </StatsWrap> 33 <EventWrap> 34 <MatchHeading>Events</MatchHeading> 35 <EventDetail> 36 <Event>{item.home_team_events.type_of_event}</Event> 37 <MatchTexts>{item.home_team_events.time}</MatchTexts> 38 </EventDetail> 39 </EventWrap> 40 </MatchItem> 41 ))} 42 </Fragment> 43 ); 44 } 45} 46

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

item.home_team_events は以下のような配列になっています。

イメージ説明
(※上記の画面キャプチャは、補足に書いたRestlet Client のレスポンスJSONの表示部分から取りました。)

ですので、例えば以下のようにすると取得できます。

JSX

1 <EventWrap> 2 <MatchHeading>Events</MatchHeading> 3 {item.home_team_events.map((event,i) => ( 4 <EventDetail key={i}> 5 <Event>{event.type_of_event}</Event> 6 <MatchTexts>{event.time}</MatchTexts> 7 </EventDetail> 8 ))} 9 </EventWrap>

上記を検証するコードを作成して以下に上げました。

https://jsfiddle.net/jun68ykt/bw6o1ajx/7/

なお、上記のコードでは、itemの中を console.log で確認するために、ご質問にあるコードを適宜修正しています。

以上参考になれば幸いです。


補足

WEB APIにテストでリクエストを投げ、その結果を表示する何らかのツールはお使いでしょうか?

私はChrome拡張機能のRestlet Client を使っていますが、リクエストメソッドやヘッダを色々変えながらWeb API にリクエストを送ることができ、レスポンスの JSON を以下のようにフォーマットして表示してくれるので、JSONの階層構造やプロパティを確認するために便利です。

イメージ説明

イメージ説明

投稿2018/08/19 19:13

編集2018/08/19 20:05
jun68ykt

総合スコア9058

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

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

www-www

2018/08/20 12:36

jun68yktさま ご回答ありがとうございます。 希望どおりの形になりました。 ありがとうございます!! また、Restlet Clientについてもご紹介いただきましてありがとうございます。 正直現時点ではどのように使用すべきか理解できておりませんが、こちらも合わせて使用してみます。
jun68ykt

2018/08/20 13:22

www-wwwさん 解決されたようですね、よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問