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

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

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

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

Q&A

2回答

1471閲覧

同じ階層のjsonの値を取り出したい

aicespw

総合スコア0

JavaScript

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

0グッド

1クリップ

投稿2020/10/05 23:52

編集2020/10/06 03:48

jsonから値を取ったんですが、特定の値を取り出したいです。

例えばですが、jsonの中からバナナの情報を取りだしたのですが、階層が同じになっているため、どうやって取り出せばいいか分からず。。。

sampleの番号がありますが、ここの番号は何が入るかわかりません。
sample4,sample21とありますが、バラバラです。

例えばですが、sample21にバナナがあるのでsample21のlifeとfiveも取り出したいです。

javascript

1 function json() { 2 var obj; 3 $.getJSON("data.json", function(data) { 4 obj = data[0]; 5 console.log(obj); 6 }); 7 }

json

1[ 2 { 3 "type": "sample", 4 "number": { 5 "type": "Text", 6 "num": "動物" 7 }, 8 "sample4_number": { 9 "value": "リンゴ" 10 }, 11 "sample4_life": { 12 "value": 1 13 }, 14 "sample4_five": { 15 "value": "1個" 16 }, 17 "sample21_number": { 18 "value": "バナナ" 19 }, 20 "sample21_life": { 21 "value": 5 22 }, 23 "sample21_five": { 24 "value": "2個" 25 } 26 } 27] 28

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

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

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

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

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

guest

回答2

0

どうやって取り出せばいいか分からず

まずは、どのようなデータにするかという目標を考えるべきです。

ご質問には目標として想定されたデータが示されておりませんので、勝手に決めた目標で例示します。

json

1{ 2 "sample4":{"number":"リンゴ","life":1,"five":"1個"}, 3 "sample21":{"number":"バナナ","life":5,"five":"2個"} 4}

data[0].typedata[0].number は言及されていませんでしたので切り捨てたデータとします。

javascript

1let d = data[0]; 2let rslt = {}; // 求めるデータ(オブジェクト) 3for( let prop in d ) { // オブジェクトの プロパティ名を総当り 4 let m; 5 if( m = prop.match(/^(sample\d+)_(.*)/) ) { // 文字列処理(正規表現) 6 //console.log(m) 7 let [_, grp, key] = m; 8 if( !rslt[grp] ) rslt[grp] = {}; 9 rslt[grp][key] = d[prop].value; 10 } 11} 12console.log( rslt ); 13/* 14 => { 15 "sample4":{"number":"リンゴ","life":1,"five":"1個"}, 16 "sample21":{"number":"バナナ","life":5,"five":"2個"} 17 } 18 */

Object.entries().reduce() を使うと更にスマートになります。

※要件をまとめるコツは、リファレンスや他者の質疑などの活字を真似て、どのような言い回しが幅広い年齢に伝わるのかを推敲し、箇条書きにすることです。

追記)
もう一案

json

1{ 2 "sample4":{"number":4,"name":"リンゴ","life":1,"five":"1個"}, 3 "sample21":{"number":21,"name":"バナナ","life":5,"five":"2個"} 4}

javascript

1var data = datas[0]; 2var tmp = {}; 3for( var prop in data ) { 4 let m; 5 if( m = prop.match(/^(sample(\d+))_(.*)/) ) { // number に相当する箇所を抽出 6 //console.log(m) 7 let [_, grp, num, key] = m; 8 if( !tmp[grp] ) tmp[grp] = {}; 9 if( key==="number" ) { 10 tmp[grp][key] = num|0; 11 tmp[grp].name = data[prop].value; 12 } 13 else { 14 tmp[grp][key] = data[prop].value; 15 } 16 } 17} 18console.log( JSON.stringify( tmp ) ); 19 20var rslt; 21Object.values(tmp).some( item=>item.name==="バナナ"&&(rslt=item) ); 22console.log( rslt ); 23// => {"number":21,"name":"バナナ","life":5,"five":"2個"}

投稿2020/10/06 11:26

編集2020/10/06 23:18
AkitoshiManabe

総合スコア5434

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

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

0

javascript

1const result=Object.entries(data[0]).filter(x=>x[1].value=="バナナ").map(x=>x[1]); 2console.log(result);

投稿2020/10/06 00:24

yambejp

総合スコア116728

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

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

aicespw

2020/10/06 03:52 編集

言い回しが悪かったため、修正しました。 例えばバナナの情報が欲しい場合、バナナはsample21_numerにあるので、sample21全ての情報がほしいのですが、、、
yambejp

2020/10/06 04:06 編集

numberにしかバナナはでてこないという担保はあるのでしょうか? その他の項目はlifeとfiveだけなんでしょうか? バナナはかならずユニークなのでしょうか?(複数のsampleに存在しない) 結果としてどういう形式のデータを取得する想定ですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問