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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

4回答

5336閲覧

JSON形式のデータをJavaScript で加工したい

Satochan24

総合スコア113

JSON

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

0グッド

1クリップ

投稿2015/12/24 04:20

編集2016/01/27 02:52

PHPのjson_encodeでエンコードしてファイル保存した
JSON形式の下記のようなデータがあるのですが、

{"access_type":"(101)","this":15,"one":76,"two":59,"three":26},
{"access_type":"(102)","this":7,"one":44,"two":6,"three":0}

これを下記のような縦と横を入れ替えた感じのJSONデータに加工したいと考えています。

[["","(101)","(102)"],["this",15,7],["one",76,44],["two",59,6],["three",26,0]]

理由は、グラフ化するために加工後の形式でないと
希望のグラフにならないからです。

JavaScriptで加工できるはずと、いろいろ知らべて、
現在は、JavaScriptの書籍と格闘中です。

何か、方法があれば教えてください。

2016/1/27追記
以前、JSONデータの加工を質問させて頂きましたが、新たに、次のようなデータが存在してることが分かりました。
【加工前】
{"house_name":"abc","house_name_sub":"def,"prefectures_name":"東京","this":0,"one":0,"two":2,"three":0},
{"house_name":"ghi","house_name_sub":"","prefectures_name":"大阪","this":0,"one":0,"two":2,"three":1}

これを同様に次のように、name_subは(※サブネームは存在しないときがあります。)nameにくっつけ、prefecture_nameの行は削除して加工したいと思っています。
spliceなど、個々の要素の削除等はあったのですが、2次元配列での、行の編集がよく分かりませんでした。
何か方法ありますでしょうか?
【加工後】
[["","abc def","ghi"],["this",0,0],["one",0,0],["two",2,2],["three",0,1]]

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

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

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

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

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

guest

回答4

0

JSON.parse()を使って、オブジェクトにして、それをfor文やforEachなどで並び変えればいけると思いますよ

投稿2015/12/24 04:23

S_Minecraft

総合スコア29

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

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

Satochan24

2015/12/24 05:26

回答有難うございます。 ただいま、JSON.parse()を調査中です。 一度、これ使えないかなぁと思ったのですが、オブジェクトにする理由が分からず 保留にしていました。 ファイルに保存したJSONデータは一度、変数に入れ直せばいいわけですね。
S_Minecraft

2015/12/24 05:38

オブジェクト(phpでは連想配列って言った方がわかりやすいかもです)にしない限りはただの文字列なので一旦変換してから再度JSON.stringify()で文字列に戻すとしないと、文字列自体を操作するということをしなければいけないので… 下の方がthisがまずそうと仰っていますが、キーとして使う場合は文字列なので問題はないです
S_Minecraft

2015/12/24 05:40

(var o={}; o.this; //これではアクセスできない o["this"]; //これならアクセスできる //こういうことです)
Satochan24

2015/12/24 06:06

なるほど。ありがとうございます。 何か、JSON.parse()を使って、JSO形式を変換してるサンプルコードのサイトとかありませんでしょうか? 基本、サンプルコードがないとなかなか書けないもので…
S_Minecraft

2015/12/24 06:48

サンプルコードといってもただ var object = JSON.parse(input); /* 変形処理 */ var output = JSON.stringify(object2); //object2は変形したobject これだけですよ
Satochan24

2015/12/24 07:43

そうですよね~。 問題は、オブジェクトに対する並び替えの処理ですよね。 分かりました。もう少しJavaScriptの筋力を鍛えて考えてみます。 方向性が絞れただけでも助かりました! 有難うございます。
guest

0

たとえば、prefectures_name というキーは出力しないよ、とか、house_name というキーは house_name_sub とくっつけて、かつ、キーの名前は出力しないよ、とか、これからもいろいろと特殊なケースが出てくるのかな、と思って、その特殊ルールをテーブルとして持つような実装を考えてみました。converter.extra がそのテーブルです。

javascript

1 var converter = { 2 keys: [], 3 key2index: {}, 4 chunks: [], 5 extra: { // 特殊な動きをするキーのルールを書く 6 house_name: { key: "", func: function(key) { return this.house_name + this.house_name_sub; } }, 7 house_name_sub: false, // 出力しないキーは false にしとく 8 prefectures_name: false // これも出力しない 9 }, 10 set: function(str, list) { 11 JSON.parse(jsonStr).forEach(function(obj, i) { 12 for (var key in obj) { 13 converter.add(i, key, obj[key]); 14 } 15 }); 16 return this; 17 }, 18 add: function(index, key, value) { 19 if (typeof this.key2index[key] == 'undefined') { 20 this.key2index[key] = this.keys.length; 21 this.keys.push(key); 22 } 23 this.chunks[index] = this.chunks[index] || { 24 add: function(key, value) { this[key] = value; }, 25 get: function(key) { return this[key]; } 26 }; 27 this.chunks[index].add(key, value); 28 }, 29 getList: function(orgKey, outKey, func) { 30 var a = [ outKey ]; 31 if (func) { 32 this.chunks.forEach(function(chunk) { a.push(func.bind(chunk)()); }); 33 } else { 34 this.chunks.forEach(function(chunk) { a.push(chunk.get(orgKey)); }); 35 } 36 return a; 37 }, 38 getResult: function() { 39 return (function(conv, a) { 40 conv.keys.forEach(function(key) { 41 var extra = conv.extra[key]; 42 if (extra === false) { 43 // ignore 44 } else if (typeof extra == 'undefined') { 45 a.push(conv.getList(key, key)); 46 } else { 47 a.push(conv.getList(key, extra.key, extra.func)); 48 } 49 }); 50 return a; 51 })(this, []); 52 } 53 }; 54 var jsonStr = '[{"house_name":"abc","house_name_sub":"def","prefectures_name":"東京","this":0,"one":0,"two":2,"three":0},{"house_name":"ghi","house_name_sub":"","prefectures_name":"大阪","this":0,"one":0,"two":2,"three":1}]'; 55 var result = converter.set(jsonStr).getResult();

途中で飽きてきちゃったのでやっつけコードになっていますが、あしからず。
初心者には難解な変態コードも含まれていますが、まあこんな書き方もあるよな、ということで。

投稿2016/01/27 23:34

unau

総合スコア2468

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

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

Satochan24

2016/01/29 01:45

回答有難うございます。 上記コード、まだ試せていませんが、試してみたらまたコメントします! 現在の状況としては、そもそものSQLを必要なデータだけ持ってくる形にし、 表示させている表とは別のSQLからJSONデータを作ることにしました。 そして、name_subとかは、concatを使って、ひとつの名前にくっつけて出力 させたら、従来のJavaScriptの変換方法で処理可能となりました。 この方法でのデータ作成が完了次第、上記コードを試してみようと思います。
Satochan24

2016/02/04 02:39

回答有難うございました。 確認したら、出来ていました!有難うございます。 現状として、 別SQLで処理させようとしたら、なぜか結果が違ってしまい、 やはり同じSQLから、出力を調整してみようと考えて、上記コードを参考に したいと思っています。 上記コードはJSONデータを直接、コードに記述していますが、JSONファイルから読み込む形でも可能でしょうか? 現在のコードで、JSONファイルを読み込んでいる部分は、下記のような記述になっています。 $(function(){ $.ajax({ url:'house_array.json', dataType:'json', }).done(function(data_j){ console.log("success"); var keys = Object.keys(data_j[0]); for (var i = 0; i < data_j.length; i++) { for (var j = 0; j < keys.length; j++) { var key = keys[j]; if (typeof result5[j] == 'undefined') { result5[j] = [ key == 'house_full_name' ? 'Month' : key ]; } result5[j].push(data_j[i][key]); } }
Satochan24

2016/02/05 06:17

JavaScriptで加工もできると思いますが、今回は以下のようにJSONファイルを経由せず、直接に変数を参照させて、力技でデータを作成しました。 ['<?php print "今月"; ?>',<?php print $var_1[this]; ?>,<?php print $var_2[this]; ?>], ['<?php print "1ヶ月前"; ?>',<?php print $var_1[one]; ?>,<?php print $var_2[one]; ?>], ['<?php print "2ヶ月前"; ?>',<?php print $var_1[two]; ?>,<?php print $var_2[two]; ?>], ['<?php print "3ヶ月前"; ?>',<?php print $var_1[three]; ?>,<?php print $var_2[three]; ?>], ['<?php print "4ヶ月前"; ?>',<?php print $var_1[four]; ?>,<?php print $var_2[four]; ?>],
guest

0

ベストアンサー

これでいかがでしょうか。

javascript

1var jsonString = '[{"access_type":"(101)","this":15,"one":76,"two":59,"three":26}, {"access_type":"(102)","this":7,"one":44,"two":6,"three":0}]'; 2var list = JSON.parse(jsonString); 3var keys = Object.keys(list[0]); 4 5var result = []; 6 7for (var i = 0; i < list.length; i++) { 8 for (var j = 0; j < keys.length; j++) { 9 var key = keys[j]; 10 if (typeof result[j] == 'undefined') { 11 result[j] = [ key == 'access_type' ? '' : key ]; 12 } 13 result[j].push(list[i][key]); 14 } 15} 16 17var json = JSON.stringify(result);

投稿2015/12/24 07:44

hyper-drums-ko

総合スコア736

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

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

Satochan24

2015/12/24 08:11

出来てます! 出力してみたら、キチンと出来てました! すみません。有難うございます。 上記のコード、なかなかテクニカルで、完全に解読できないのですが、 JavaScriptの勉強続けて、解読したいと思います。 ありがとうございました!
guest

0

"this" キーが悪さしそうです。
"this" こうやってアクセスする分には問題になりそうもないですけど、this は、javascript では予約語です。可能であれば、this1 とか名前変更した方が良さそうです。

投稿2015/12/24 04:38

ipadcaron

総合スコア1693

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

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

Satochan24

2015/12/24 05:09

回答ありがとうございます。 「this」は、「this1」に修正してみます。
Satochan24

2015/12/24 05:18

あれっ!?ひょっとすると、”year”とかもまずいですか!?
Satochan24

2016/01/29 01:40

回答有難うございます。 キーワードのリンクも参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問