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

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

ただいまの
回答率

87.49%

javascriptのエラーの意味

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 3,379

score 88

お世話になります。

まずはコード書きます。

*******
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
$(function() {
  $.getJSON("array.json" , function(data) {
     for (key in data) {
        alert(key + " : " + data[key]);
    }
  });
});
</script>
</head>
<body>
</body>
</html>
*******

上記を実行するとアラートに(1 : [object Object])と表示され要素は取得されず

Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead 

というエラーが出ます。

このエラーの意味と要素が取り出せない原因は何でしょうか?

ご教授いただければ幸いです
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

$(function() {
  $.getJSON("array.json" , function(data) {
     $.each(data, function(obj, val) {
         alert(val);
         //console.log(val); //これで確認しましょう
     });
  });
}); 

こんなふうにすると、取れます。


追記

$(function() {
  $.getJSON("array.json" , function(data) {
     $.each(data, function(obj, val) {
         alert(val.M);
     });
  });
}); 

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/04 20:46

    失礼致しました
    聞きたかったことは下記のようにした場合、$formFileがkaridata.xlsxだったら$readfileに代入するということでした。

    $formfileというのはindex.htmlから渡ってきたものです。

    if ($readFile == $formfile;) {
    $readFile = "karidata.xlsx";
    } else {
    exit;
    };

    キャンセル

  • 2015/09/04 21:20

    何れにしても…試せばわかることでは?

    キャンセル

  • 2015/09/07 13:55

    お世話になっております

    追記で質問ばかりして申し訳ありません
    下記コードの★印のようにdata[i]の中身がnullだった場合、nullにブランクを代入したいのですがどのように記述すればよろしいでしょうか?

    $(function() {
    var data = new Array();
    $.getJSON("array.json" , function(data) {
    for( var i in data){
    for( var j in data[i] ){
    ★if(data[i] == null){
    null = "";
    var myMarker = new google.maps.Marker({
    position: new google.maps.LatLng(data[i]["M"], data[i]["N"]),
    map: myMap,
    });
    attachMessage(myMarker, data[i]["D"] + '</br>' + data[i]["E"]);
    }
    }
    }
    });
    });

    キャンセル

0

alertで[object Object]出るときは単純に文字列にできない形式だからです。

ブラウザのコンソールを開いてconsole.log(data)とするとdataの中身がわかります。
他の回答でJSON載せられていたので拝見しましたが

dataは
1:  {
    A: '管理番号',
    B: '種別',
    (以下略)
}
というオブジェクトなので

alert(data[key].A)

などとすればアクセスできると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/04 12:07

    お世話になっております。

    ご回答有り難うございます

    ****************
    $(function() {
    $.getJSON("array.json" , function(data) {
    for( var i in data){
    for( var j in data[i] ){
    alert( i + j + data[i][j] );
    }
    }
    });
    });
    ****************

    上記のようにアクセスすることはできましたが、別件の質問になりますが本来の使用目的のアクセスした要素を変数に代入してという部分でつまずいています。

    他の回答者の方にもそのような形で質問しているため、この質問をクローズしておりませんでした。

    ご回答ありがとうございました。

    キャンセル

0

JSONオブジェクトを2度回しているのがおかしいと思われ。

for(var i in data){   // ここでJSONの外側("1","2","3",...)をまわしてる
  for(var j in data[i] ){   // ここで、data[i]の中を回してる。("A","B","C",...)
    alert( i + j + data[i][j] );
  }
}
内側のfor分は不要ではありませんか?

また、jsonの"1","2"のデータはヘッダか何かですか?
M,Nの値が緯度経度として不正ですね。
「数値.数値」の形の時だけ処理するには下記のコードはどうでしょうか?

var re= new RegExp("\d+\.\d+");  // 数値.数値かどうかの正規表現
for(var i in data){
  if (re.test(data[i]["M"]) && re.test(data[i]["N"])) {
    // 確認のためコンソールに緯度経度を表示
    console.log("緯度経度:" + data[i]["M"] + ', ' + data[i]["N"]);
    // google map の処理
  }
}

あと、他の回答者の方もalert()ではなくconsole.log()を薦めてますが、そちらを使いましょう!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/04 18:33

    お世話になっております。
    ご回答ありがとうございます。

    まずはうまくいきました。(下記コード記載)

    >内側のfor分は不要ではありませんか?
    2次元配列なのでネストしているのですが、認識が間違っていますでしょうか?

    >また、jsonの"1","2"のデータはヘッダか何かですか?

    もともとjsonファイルを生成する際に、エクセルをphpでjsonに変換して、そのファイルをjavascriptで読みグーグルマップに表示するという機能を実装しているのでそのような形になっております。

    >あと、他の回答者の方もalert()ではなくconsole.log()を薦めてますが、そちらを使いましょう!

    ご指摘ありがとうございます。
    1行ずつ確認したくてアラートを使っていました。
    基本はコンソールで確認はしております。

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="UTF-8" />
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    </head>
    <body>
    <div id="map" style="width: 900px; height: 500px;"></div>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
    <script language="JavaScript">

    $(function() {
    var data = new Array();
    $.getJSON("array.json" , function(data) {
    for( var i in data){
    for( var j in data[i] ){
    //alert(data[i]["M"] + data[i]["N"]); デバッグ用
    var myMarker = new google.maps.Marker({
    position: new google.maps.LatLng(data[i]["M"], data[i]["N"]),
    map: myMap,
    });
    attachMessage(myMarker, data[i]["J"]);
    }
    }
    });
    });

    function attachMessage(marker,msg) {
    google.maps.event.addListener(marker, 'click', function() {
    new google.maps.Geocoder().geocode({
    latLng: marker.getPosition()
    }, function(result, status) {
    if (status == google.maps.GeocoderStatus.OK) {
    new google.maps.InfoWindow({
    content: msg
    }).open(marker.getMap(), marker);
    }
    });
    });
    }

    var myMap = new google.maps.Map(document.getElementById('map'), {
    zoom: 12,
    center: new google.maps.LatLng(34.894000, 136.930437),
    scrollwheel: false,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    });


    </script>
    </body>
    </html>

    キャンセル

  • 2015/09/04 18:54 編集

    >>内側のfor分は不要ではありませんか?
    >2次元配列なのでネストしているのですが、認識が間違っていますでしょうか?
    for文でしたね。 てへへ。

    えっと。

    for( var i in data){
    for( var j in data[i] ){
    //alert(data[i]["M"] + data[i]["N"]); デバッグ用
    var myMarker = new google.maps.Marker({
    position: new google.maps.LatLng(data[i]["M"], data[i]["N"]),
    map: myMap,
    });
    attachMessage(myMarker, data[i]["J"]);
    }
    }

    の内側のfor文の中で 変数j を使ってませんよね?
    これだと、上のJSONの例では3☓17(A~Q)=51回 ほど

    var myMarker = new google.maps.Ma・・・

    を繰り返す事になると思うのですが。。。。

    キャンセル

  • 2015/09/04 20:55

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

    初心者なもので見当違いかもしれませんがお許し下さい

    position: new google.maps.LatLng(j["M"], j["N"]),

    のようにしたほうが良いということでしょうか?

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る