• ベストアンサー

JSONデータを50音順でソートしたい

下記のようなJSONデータを50音順でソートしたいのですが、 どうすれば良いでしょうか? {  "human": {  "artist": [   {   "link": "goo1.html",   "name": "小田 和正",   "yomi": "おだかずまさ"   },   {   "link": "goo2.html",   "name": "岩佐美咲",   "yomi": "いわさみさき"   },   {   "link": "goo3.html",   "name": "指原莉乃",   "yomi": "しのはらりの"   },  ]  } }

  • re999
  • お礼率61% (476/777)

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

javascriptには配列をソートするメソッドがありますので、それを利用すればよろしいかと。 例えば、yomi順にソートする例 (以下の例では、直接並び替えずにtest配列に移し変えてソートしています) var json = {  "human": {   "artist": [    {     "link": "goo1.html",     "name": "小田 和正",     "yomi": "おだかずまさ"    },    {     "link": "goo2.html",     "name": "岩佐美咲",     "yomi": "いわさみさき"    },    {     "link": "goo3.html",     "name": "指原莉乃",     "yomi": "しのはらりの"    }   ]  } }; // 並べ替え用の配列に格納 var i, test = []; var artist = json.human.artist; var n = artist.length; for(i=0; i<n; i++)  test[i] = [ artist[i].yomi, artist[i] ]; // 並べ替え test.sort(); for(i=0; i<n; i++)  test[i] = test[i][1]; // 結果をテスト表示してみる var t, result = ""; for(i=0; t=test[i++];)  result += (result?"\n":"") + "link=" + t.link + " / name=" + t.name + " / yomi=" + t.yomi; alert(result);

re999
質問者

お礼

回答ありがとうございました。 期待した通りに動作しました。 大変参考になりました!

関連するQ&A

  • JSONデータを50音で選択表示させたい

    下記JSONデータの中から、 50音に応じた内容を選択表示させたいのですが、 どうすれば良いでしょうか? ■具体例 ・「チェックボックス」もしくは「プルダウン」で、「お」を選択したら、下記データを表示させたい   {   "link": "goo1.html",   "name": "小田 和正",   "yomi": "おだかずまさ"   }, ■元データ(JSON) {  "human": {  "artist": [   {   "link": "goo1.html",   "name": "小田 和正",   "yomi": "おだかずまさ"   },   {   "link": "goo2.html",   "name": "岩佐美咲",   "yomi": "いわさみさき"   },   {   "link": "goo3.html",   "name": "指原莉乃",   "yomi": "しのはらりの"   },  ]  } } ・jQueryのAJAX通信とかでやるのでしょうか? (実現出来れば、手段は何でもいいです)

  • AKB48総選挙について

    今年の総選挙を予想してみました。 1位 渡辺麻友 2位 松井珠理奈 3位 峯岸みなみ 4位 大島優子 5位 篠田麻里子 6位 山本彩 7位 高橋みなみ 8位 柏木由紀 9位 宮脇咲良 10位 松井玲奈 11位 横山由依 12位 高柳明音 13位 木本花音 14位 島崎遥香 15位 岩田華怜 16位 指原莉乃 17位 小嶋陽菜 18位 松村香織 19位 山田菜々 20位 北原里英 21位 梅田彩佳 22位 渡辺美優紀 23位 本村碧唯 24位 古川愛李 25位 大矢真那 26位 木崎ゆりあ 27位 梅本まどか 28位 秦佐和子 29位 倉持明日香 30位 小笠原茉由 31位 川栄莉奈 32位 中西優香 33位 岩佐美咲 34位 仁藤萌乃 35位 松井咲子 36位 井口栞 37位 内山命 38位 小森美果 39位 前田亜美 40位 矢方美紀 と予想しています。 どう思いますか?

  • AKB48総選挙1位は誰が相応しいですか

    【総選挙】来年は指原莉乃、柏木由紀、松井珠理奈が1位取ると思いますが誰にとって欲しいですか? 指原莉乃・・・バラエティの女王 柏木由紀・・・アーティストの女王 松井珠理奈・・・SKEのエース 渡辺麻友は相応しくないと思います 指原莉乃 柏木由紀 松井珠理奈 松井玲奈 山本彩 島崎遥香 小嶋陽菜 高橋みなみ 須田亜香里 宮脇咲良 宮澤佐江 横山由依 生駒里奈 柴田阿弥 川栄李奈 松村香織 渡辺美優紀 北原里英 入山杏奈 兒玉遥 峯岸みなみ 木崎ゆりあ 武藤十夢 森保まどか 高城亜樹 朝長美桜 高橋朱里 山田菜々 大矢真那 高柳明音 加藤玲奈 藤江れいな 二村春香 梅田彩佳 小嶋真子 古川愛李 田島芽瑠 穴井千尋 木下有希子 矢倉楓子 多田愛佳 白間美瑠 磯原杏華 田野優花 岩永亞美 佐々木優佳里 本村碧唯 岩佐美咲 木本花音 岡田奈々 倉持明日香 市川美織 山田みずほ 古畑奈和 大場美奈 石田晴香 上西恵 薮下柊 坂口理子 小谷里歩 西野未姫 内山奈月 松岡菜摘 永尾まりや 岩立沙穂 村重杏奈 梅本まどか 山内鈴蘭 前田亜美 田名部生来 吉田朱里 矢方美紀 阿比留李帆 斉藤真木子 小笠原茉由 小林亜実 宮崎美穂 駒田京伽 大島涼花 渡辺麻友

  • jQueryでxmlを読み込んで、五十音順にソート

    jQueryでxmlを読み込んで、五十音順にソート qa6111214でjQueryでXMLを操作する方法について質問させていただいた者です。 たびたび申し訳有りません。質問させていただきます。 jQueryでxmlで読み込んで、五十音順にソートしたいのですが方法がわかりません。 ---------------------------------------------------------------------------------------------------- <data> <item> <link>hoge1.html</link> <name>山田 太郎</name> <syllabary>やまだたろう</syllabary> </item> <item> <link>hoge2.html</link> <name>山田 花子</name> <syllabary>やまだはなこ</syllabary> </item> <item> <link>hoge3.html</link> <name>田中 太郎</name> <syllabary>たなかたろう</syllabary> </item> <item> <link>hoge4.html</link> <name>田中 花子</name> <syllabary>たなかはなこ</syllabary> </item> <item> <link>hoge5.html</link> <name>鈴木 太郎</name> <syllabary>すずきたろう</syllabary> </item> <item> <link>hoge6.html</link> <name>鈴木 花子</name> <syllabary>すずきはなこ</syllabary> </item> </data> ------------------------------------------------------------------------------------------------ というxmlデータをjQueryで読み込んで、五十音順にソートして表示する方法を探しています。 例えば…… ------------------------------------------------------------------------------------------------ <a href="hoge5.html">鈴木 太郎</a> <a href="hoge6.html">鈴木 花子</a> <a href="hoge3.html">田中 太郎</a> <a href="hoge4.html">田中 花子</a> <a href="hoge1.html">山田 太郎</a> <a href="hoge2.html">山田 花子</a> ------------------------------------------------------------------------------------------------ といった具合に書き出したいのですが…… ご教授願います。また、参考になりそうな書籍/サイトはありますでしょうか。 宜しくお願い致します。

  • ExcelかAccessで五十音順にソートしたい

    Office2007を使っています。ExcelかAccessで五十音順にソートしたいのですが、漢字も一緒にソートしたいと思っています。Excelで五十音でソートすると、最初にアルファベット、続いてカタカナ、続いて漢字というようにソートされます。アルファベットは別にして、カタカナ、漢字は一緒に五十音でソートしてもらいたいのですが、そのような方法はないでしょうか? 例えば アンドウ コンドウ 安藤 イトウ というデータがあれば アンドウ 安藤 イトウ コンドウ というようにデータがソートされてもらいたいです。 Excelの関数のphoneticはExcelからのデータじゃないので 使えません。なにとぞご教授お願いします。

  • JSON形式のデータを古い順に30件表示させたい

    PHPからJSON形式のデータを受け取り、データの古い順に30件、htmlで表示させたいです。 いろいろ調べて1件目のデータを表示させることができたのですが 30件分のデータを古い順に表示させることができません。 わかりやすく教えていただけないでしょうか? ※やりたいこと html内に <div class="area_report" id="area_100000"></div> <div class="area_report" id="area_200000"></div> <div class="area_report" id="area_300000"></div>      ・      ・      ・ 最高10件のエリアIDが書かれています。 "area_"をreplaceしてエリアIDを取得します。 売上報告.phpにアクセスし、エリアIDごとにJSON形式のデータを受け取ります。 1つのエリアIDに店舗は1~複数あります。 店舗ごとの古いデータから30件、htmlで表示させたいです。 店舗がいくつあるかは"Tenpo"でわかります。 データの登録日は"UpDate"でわかります。 店舗が100件あると、表示完了までに時間がかかり過ぎるのであれば 何か良いアドバイスをいただきたいです。 javascript勉強中で不適切な記述をしているかもしれません。 「こちらの記述の方が簡単だよ」というのがありましたら、ぜひ教えてください。 どうぞよろしくお願いします。 ※JSON形式のデータ {"AreaReport":{ "AreaId":"100000", "Tenpo":4, "Sales":[ {"Name":"岡崎", "TenpoId":100004, "Direct":0, "Amount":48000, "Report":"売り上げ報告あいうえお", "UpDate":"2011-04-30 10:32:40"}, {"Name":"一宮", "TenpoId":100001, "Direct":0, "Amount":30000, "Report":"売り上げ報告かきくけこ", "UpDate":"2011-04-12 10:32:40"}, {"Name":"春日井", "TenpoId":100002, "Direct":0, "Amount":10000, "Report":"売り上げ報告さしすせそ", "UpDate":"2011-04-01 10:32:40"}, {"Name":"名古屋", "TenpoId":100003, "Direct":1, "Amount":50000, "Report":"売り上げ報告たちつてと", "UpDate":"2011-04-21 10:32:40"}, ]}} ※javascriptコード <script type="text/javascript"> if( window.attachEvent ) { window.attachEvent( 'onload', reportWrite ); } else { window.addEventListener( 'DOMContentLoaded', reportWrite, false ); } function reportWrite() { var area_array = new Array(); t = document.getElementsByTagName( 'div' ); for( var i = 0, n = t.length; i < n; i ++ ) { if( t[ i ].className.match( 'area_report' ) ) { var area_id = t[ i ].id.replace( 'area_', '' ); area_array.push( area_id ); } } for( var i = 0; i < area_array.length; i ++ ) { areaReport_id = area_array[ i ]; ReportGet( areaReport_id); } } function include_javascript( js_file ) { //window.alert(js_file); var script = document.createElement( 'script' ); script.src = js_file; script.type = 'text/javascript'; script.defer = true; document.getElementsByTagName( "head" )[ 0 ].appendChild( script ); } function ReportGet( areaReport_id) { include_javascript( 'http://売上報告.php?id=' + areaReport_id + '&callback=printReport' ); } function printReport(Repo) { var htmlStr = ""; htmlStr = htmlStr + Repo["AreaReport"]["Sales"][0]["UpDate"] + '<br />'; htmlStr = htmlStr + Repo["AreaReport"]["Sales"][0]["Name"] + '<br />'; htmlStr = htmlStr + Repo["AreaReport"]["Sales"][0]["Direct"] + '<br />'; htmlStr = htmlStr + Repo["AreaReport"]["Sales"][0]["Amount"] + '<br />'; replace_val = Repo["AreaReport"]["Sales"][0]["Report"]; htmlStr = htmlStr + replace_val.replace(/\n/g, '<br />'); htmlStr = htmlStr + '<hr />'; document.getElementById("Report").innerHTML = htmlStr; // window.alert(htmlStr); } </script>

  • 数値の大きい順にソート

    数値の大きい順にソートするにはどのようにしたらよろしいでしょうか? 例えば、 @A = ("10","5","18","6","9"); という配列があるとします。 これを @B = sort @A; とすると、 10,18,5,6,9 となってしまいます。 これを 18,10,9,6,5 のように数値の大きい順に配列Bに代入したいのですが、どうしたらよいでしょうか?よろしくお願いします。

    • ベストアンサー
    • Perl
  • 配列を大きい順にソートしたいのですが・・・

    次の配列のc.intValue()が回数表示されるのですが、 あまりにデータが多いため、見やすくするために数が大きい順に表示したいと思います。 for文でlengthを求め・・・って言うのは分かるのですが、 c.intValue()で表示にしているので、どう書けばいいか分かりません。 以下ソースです。 ・・・・・ HashMap<String,Integer> hsFlow = new HashMap<String,Integer>(); <中略> Iterator<String> ir = hsFlow.keySet().iterator(); while(ir.hasNext()){ String f = ir.next(); Integer c = hsFlow.get(f); if(c==null) c = new Integer(0); System.out.println("経路"+f+":"+c.intValue()+"回"); 具体的なソースコードを教えていただけると嬉しいです。 ご回答よろしくお願いします。

    • ベストアンサー
    • Java
  • 辞書順にソートしたいのですが・・・

    C言語を始めたばかりの無知な自分で申し訳ないのですが学校で課題が出て分からなくて困っています。 課題は任意の長さの文字列(英字のみ)データをファイルから読み込み、辞書順に並べ替えるプログラムの作成です。文字列の最大長は64、データの最大個数は1000です。 一応自分で以下の状態まで作成したのですが、データが1000まで読み込んでくれません。申し訳ありませんが締め切りは明日なのでなるべく早くよろしくお願いします。 #include<stdio.h> #include<string.h> #include<strings.h> #define MAX 67 int main(void) { FILE *fp; char ex[1000][MAX],tmp[MAX],a[100]; int i,j,b; printf("Input filename:"); scanf("%s",a); fp = fopen(a,"r"); if(fp == NULL){ printf("Not open\n"); } for(i=0;!feof(fp);i++){ fgets(ex[i],MAX,fp); } for(i=0;i<=MAX-2;i++){ for(j=i+1;j<=MAX-1;j++){ b = strcasecmp(ex[i],ex[j]); if(b>0){ strcpy(tmp,ex[i]); strcpy(ex[i],ex[j]); strcpy(ex[j],tmp); } if(b==0 && *ex[i]<='z' && *ex[i]>='a' && *ex[j]<='Z' && *ex[j]>='A'){ strcpy(tmp,ex[i]); strcpy(ex[i],ex[j]); strcpy(ex[j],tmp); } } } for(i=0;i<=MAX-1;i++){ printf("%s",ex[i]); } fclose(fp); return 0; }

  • エクセルのソート順がおかしい

    エクセルのソート順がおかしい B4セルから縦方向に以下のデータを降順にオプションでコード順にソートする。 磐田 川崎 G大阪 C大阪 の順になる。 各要素間の値の比較する関数をVBAで作成して比較すると 川崎 < G大阪 となり、大小関係がおかしくなる。 上記以外の比較は下記のとおり正しい。 磐田 > 川崎 G大阪 > C大阪 各要素間の値の比較する関数は以下である。 Option Explicit Function compare(str1 As String, str2 As String) As String ' 大小関係を検査する If str1 > str2 Then compare = str1 & " greater than " & str2 ElseIf str1 = str2 Then compare = str1 & " Equal to " & str2 Else compare = str1 & " smaller than " & str2 End If End Function 実際のプログラムは「2分木探索」を使用しているので,大小関係が大切である。 これはどうすればソートがコード(ユニコード)順になるのか、教えて下さい。 なおエクセルは2000を使用している。

専門家に質問してみよう