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

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

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

JIRAは、アトラシアン社が開発しているプロジェクト管理ツールです。高いカスタマイズ性を持ち、タスク・工数・進捗・スケジュールなどプロジェクトを全般的に管理できます。複数のプロジェクトを一元管理することも可能です。

Q&A

3回答

919閲覧

div配置を指定をしたい

退会済みユーザー

退会済みユーザー

総合スコア0

JIRA

JIRAは、アトラシアン社が開発しているプロジェクト管理ツールです。高いカスタマイズ性を持ち、タスク・工数・進捗・スケジュールなどプロジェクトを全般的に管理できます。複数のプロジェクトを一元管理することも可能です。

0グッド

0クリップ

投稿2020/09/10 16:05

編集2020/09/13 06:15

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

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

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

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

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

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

hentaiman

2020/09/10 16:28

少しずつconsole.log挟んで値を確認していってみましょう
Zuishin

2020/09/13 08:09

複数アカウント指摘されて退会。
guest

回答3

0

前質問

過去記事と自分のjsonデータの文法が少し違うから、動かないのでは。。。?
とも思ったりしたのですが、関係ないでしょうか。

JSON文法の件は、前質問で解決したのではなかったのでしょうか。

無言でベストアンサーを選んでいますが、回答を読んで何をどう解釈して解決したのですか。
経験上、何も反応がない場合は、十分に理解せずに質問をクローズしているケースが大半ですが、本当に十分に理解しているのでしょうか。

JavaScriptの解説サイト

JavaScriptは立ち位置が特殊な言語で、

  • 古いブラウザもサポートする必要がある
  • 後方互換性を捨てられず、洗練されていない旧来の仕様を排除できない
  • 複数ブラウザで動作するよう辻褄の合う仕様とする必要がある
  • 公式仕様書は英語のみ(最新の日本語訳は2020/09/11現在、存在しない)

日本語の解説サイトはそこそこあるものの、全てにおいて完璧に正しいサイトはまず存在していません。

ECMAScriptなどの英語の仕様書を読む努力を怠らなければ問題は有りませんが、解読に時間が掛かります。

JSON.parse()

とはいえ、MDNは8-9割方は正解なので、そこを基盤として、自分自身で検証を進めて誤りを補正して、コーディングを行う人が大半かと思います。

例外
解析する文字列が有効な JSON でない場合、SyntaxError 例外が発生します。

JavaScript

1const jsonStr = `{ 2 "title": "タイトル", 3 "text": { 4 "menu": "タイトル", 5 "menu1": "タイトル", 6 "menu2": {} 7 }, 8 "text1": { 9 "menu3": "タイトル", 10 "menu4": "タイトル", 11 "menu5": {} 12 }, 13 "text2": { 14 "menu6": "タイトル", 15 "menu7": { 16 "menu8": { 17 "menu9": "タイトル", 18 "menu10": 120 19 } 20 } 21 } 22}`; 23 24JSON.parse(jsonStr);

SyntaxErrorが発生しないので、このJSON文字列は文法的に正しいといえます。

あなたに必要なのは、正しい情報のサイトではなく、正しさを担保する手段です。
そういう目線でMDNを確認すれば、自分自身で検証することが出来ます。

Re: sadonnatakku さん

投稿2020/09/10 22:42

編集2020/09/10 22:58
think49

総合スコア18162

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

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

0

ありがたく思うなら解決していけ。複数アカウントがバレにくいように質問を削除するな。

ARP - jwosnwデータの文法について|teratail
JavaScript - JSONデータをシンプルにHTMLに直したい。|teratail

間違っているのは JSON ではなくスクリプトの方です。
前回の質問で確認した通り、JSON は間違っていません。

しかしながら、スクリプトに手を付けることなく JSON を書き換えることによって何らかの表示をしたいのであれば、二番目の追記のようにしてください。

JavaScript

1$.getJSON("data.json", function(data) { 2 for (var i in data) { 3 $("#wrap").append(`${i}`); 4 } 5// for (var i in data) { 6// var div = '<h5>' + 7// data[i].title + 8// '</h5>' + 9// '<div class="box">' + 10// '<ul class="inner-list">'; 11// for (var j in data[i].text) { 12// div += '<li>' + 13// data[i].menu[j].menu + 14// '</li>'; 15// } 16// div += '</ul>' + 17// '</div>'; 18// $("#wrap").append(div); 19// } 20});

以上のように書き換えたところ、次のように表示されました。

titletexttext1text2

御覧のように i は JSON のトップレベルオブジェクトのプロパティを示しています。
しかしそれをどのように直せば意図通りになるかは、元々の意図がこのスクリプトでは不明なのでわかりません。

次にサンプルを上げますから、それを見て何がしたかったかを把握する材料にしてください。

JavaScript

1$(document).ready(function() { 2 $.getJSON("data.json", function(data) { 3 const toUl = element => { 4 const result = $("<ul>"); 5 for ([key, value] of Object.entries(element)) { 6 switch (typeof(value)) { 7 case "object": 8 result.append(toUl(value)); 9 break; 10 default: 11 result.append($("<li>").append(value)); 12 break; 13 } 14 } 15 return result; 16 }; 17 18 for ([key, value] of Object.entries(data)) { 19 switch (typeof(value)) { 20 case "string": 21 $("#wrap").append("<h5>").append(value); 22 break; 23 case "object": 24 $("#wrap").append(toUl(value)); 25 break; 26 } 27 } 28 }); 29});

追記 実行結果

イメージ説明

追記

もし仮に、スクリプトには一切手を加えることなく、JSON の構造をどのように変えてもいいからなにがしか表示できるようにしたいということであれば、次のものを試してください。

[ { "title":"タイトル1", "text":[0, 1], "menu":[ {"menu":"メニュー0"}, {"menu":"メニュー1"} ] }, { "title":"タイトル2", "text":[0, 1, 2], "menu":[ {"menu":"メニュー0"}, {"menu":"メニュー1"}, {"menu":"メニュー2"} ] } ]

投稿2020/09/11 00:48

編集2020/09/13 08:32
Zuishin

総合スコア28660

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

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

0

根本的に理解が足りてないことは承知の上ですが、ご教示頂きたい

処理を分けて考えます。工程が決まれば、作業の原因がわかります。

  1. Ajax の応答

javascript

1$(document).ready(function() { 2 $.getJSON("data.json", function(data) { 3 // Ajax の結果が data に渡される。 4 }); 5});
  1. 応答されたデータ(1. で受け取った data )の確認

console.log() を活用して、データを確認(アクセス方法の再確認など)

javascript

1var data = { /* omited */ }; // 開発者コンソールで試す等のとき 2 // ハードコードしてループ処理に集中する 3for (var key in data) { 4 let val = data[key]; 5 console.log( key, val ); 6}; 7/* 8=> 9 title タイトル 10 text {menu: "タイトル", menu1: "タイトル", menu2: {…}} 11 text1 {menu3: "タイトル", menu4: "タイトル", menu5: {…}} 12 text2 {menu6: "タイトル", menu7: {…}} 13*/

val が文字列か、object かで切り分ける必要があるとわかる。
ご質問のコードに if条件(三項)演算が、見当たらないので、この作業ができていないと分かる。

  1. データ変換の方針を検討

javascript

1for (var key in data) { 2 let val = data[key]; 3 if( "string" === typeof val ) { 4 5 } 6 else { 7 // 再帰処理を使うこともできそう? 8 } 9};

※ その他、Object.entries() で、key, val を簡単に取り出す方法なども思いつく。

  1. HTMLへの挿し込み(HTML文書の動的編集)
  1. JSON->HTMLの場合

innerHTML プロパティに文字列処理して操作。
2. JSON->DOMの場合
document.createElement()document.appendChild() などで操作。


面倒でも 2), 3) の作業を行うことで、目標到達がスムーズになります。

自分で使えそうなところを改変した

初心のうちは、反復処理はスクラッチで起こすくらいのほうが上達します。
2), 3) の作業で、少なからず「インプット」&「アウトプット」が発生するため。

投稿2020/09/11 05:15

AkitoshiManabe

総合スコア5432

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問