• 締切済み

JSONパース時に改行があるとエラーに

ajaxでjsonを取得して、$.parseJSON(ajaxReq.responseText); でパースさせようとしているのですが、 どうしてもエラーになります。 JSONの書き方の問題らしいので色々試したところ、改行を消すとシンタックスエラーも消えました。 複雑に入れ子になったJSONファイルなので改行がないとわけがわかりません。 なのでそのままの形でパースしたいのですが何か良い方法はないのでしょうか?

みんなの回答

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

#2です。 本題からずれてしまうのかも知れませんが、 >eval以外に変換する方法があるんでしょうか。 パーサをスクリプトで作成してしまえば可能かと… すでにあるのではないかと探してみたら、やはりあるみたいです。 (内容は確認していません) https://github.com/douglascrockford/JSON-js http://code.google.com/p/json-sans-eval/

  • think49
  • ベストアンサー率59% (285/482)
回答No.3

JSON は改行(CRLF)を認めてるはずなんですが、現象を再現できるコードを掲示できるでしょうか? 文字列リテラルで改行できないのは通常の JavaScript と一緒ですが、エスケープすれば済む話ですよね…。 http://jsfiddle.net/6hvBe/2/ http://es5.github.com/#x15.12.1.1 http://api.jquery.com/jQuery.parseJSON/

neglectiii
質問者

お礼

http://...../data.json → { JSONファイル} これをAjaxで取得し、 var data = XMLHttpReqInstance.responseText; data = $.parseJSON(data); //ここでparseJSON内のJSON.parseでSyntax...illegal...とのエラー こんな形です。 JSON内の改行はエンターキーで行っています。 JSLINTでチェックしたところSyntaxには問題ないようです。 下にも書きましたが、改行というよりデータ形式に問題があるのかもしれないです

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

よくわかってませんが… 『textで取得して、スクリプトで改行を削除し、evalでオブジェクトに変換』というのでは?

neglectiii
質問者

お礼

ありがとうございます。 確かにevalで変換するとできますが、evalにはセキュリティ上欠陥があるので避けたいんですよね。 改行をreplace((new RegExp("改行","g")),"");で削除してみてもだめでした。 下にも書いたんですが、text形式だからダメだったんですかね。 eval以外に変換する方法があるんでしょうか。

  • 4017B
  • ベストアンサー率73% (1305/1776)
回答No.1

何かAjaxに置けるJSONファイルの扱いの仕様みたいです。 >http://www.support-you.com/wiki/ajax/Ajax%2F999)Javascript%2F500)JSON%2F500)%B2%FE%B9%D4%A5%B3%A1%BC%A5%C9%A4%CE%CC%E4%C2%EA.html どうしても人に優しいJSONで行きたいのなら、JavaScript(jQuery)とかでやるとか??

neglectiii
質問者

お礼

ありがとうございます。 皆様のコメントを参考にしつつあれこれいじくった結果、どうやら改行というより AjaxのXMLHttpRequest.responseTextをそのまま$.parseJSONでパースしようとしていることが原因のようでした。 改行文字がだめというのはエンターキーで改行したものも含むんですかね。 そのあたりが疑問です。

関連するQ&A

  • IEでJSONが読み込めない

    IEでJSONが読み込めないので、以下のサイトのソースをそのまま持ってきて動かしてみましたが、読み込めませんでした。 http://www.outcut.de/MooFlow/example-ajax.html なので多分プログラム自体には問題がないのだと思うので、サーバの設定か何かかなと予想されるのですが、IEでJSONを読み込ませるために何かサーバの設定をしなければならないのでしょうか? ご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • $.getJSONで複数のJSONを取得する

    $.getJSON("jsonGet.php", function (result) { でJSONファイルをゲットしています。 質問「もし2つ以上のJSONファイルが必要な場合、 どのように記述すればいいのでしょうか?」 $.getJSON("jsonGet1.php", function (result1) { $.getJSON("jsonGet2.php", function (result2) { } } のように入れ子にするのでしょうか? $.getJSON命令1つで複数のJSONファイルをリターンすることは不可能でしょうか? ロジック上、2つのJSONファイルを取得してから処理を継続します。 通常、どのようにコーディングするのか教えてください よろしくお願いします。

  • JSONのデータから商品名の取得の仕方

    今現在下記の記述でJSONを取得しています。 ===== <html> <head> <title>JSONのデータを使ってみる</title> </head> <script type="text/javascript" src="./prototype.js"></script> <script type="text/javascript"> function execute() { var url = './ItemSearch_json.php'; var paramList = "keyword=" + encodeURIComponent("ふくろう"); var a = new Ajax.Request( url, { method: 'get', parameters: paramList, onSuccess: function(request) { // alert('読み込み成功しました'); // jsonの値を処理する場合↓↓ var json; eval("json="+request.responseText); }, onComplete: function(request) { alert('読み込みが完了しました'); $('container').innerHTML = request.responseText; // jsonの値を処理する場合↓↓ var json; eval("json="+request.responseText); }, onFailure: function(request) { alert('読み込みに失敗しました'); }, onException: function (request) { alert('読み込み中にエラーが発生しました'); } } ); } </script> <body> <div id="container">content</div> <button onclick="execute()">サンプル実行</button> </body> </html> ===== このままだと、プレーンテキストは表示されるのですが、商品名や価格の一覧などを選択して表示できません。 evalなどを使うのかなと思うのですが、はっきり分かりません。 ヒントを教えていただけないでしょうか。

    • ベストアンサー
    • AJAX
  • XMLパースエラー

    はじめまして。 HTMLを開発している者です。 APIを駆使して情報を得たいのですが、localhost環境で開発していた時には正常に動作したのに、いざサーバーへアップすると、情報を取得するphpファイルで、 XML パースエラー: 要素が見つかりません。 URL: http://~ 行番号: 1, 列番号: 1: と出るのです。これはやはりサーバー環境によるエラーなのでしょうか? ご回答よろしくお願いいたします。

    • 締切済み
    • XML
  • フォームからjQuery,jQuery.jsonを使ってJSONを作っ

    フォームからjQuery,jQuery.jsonを使ってJSONを作ってPHPで表示したい。 こんばんは。2、3日ずっと悩んでて解決しないので助けてください。 jQuery,jQuery.jsonを使ってJSONを作成しています。 クリックイベントに var form = $("#sform"); var json = $(form.serializeArray()); var strJson = $.toJSON(json); という形をとって $.ajax({ url : "request.php", type : "post", data : strJson, success: function(request){ $('#result').html(request); } }); で送っています。 ただPHP側で var_dump($_POST); を行ってもArray ( ) と表示されます。 firebugで見たところpostに入っているデータは以下の通りです。 {"0":{"name":"date","value":"2010/09/15"},"1":{"name":"type","value":"new"},"2":{"name":"bin[]","value":"2"},"3":{"name":"bin[]","value":"3"},"length":4} var_dumpで表示できないのはなぜでしょうか? 上記で変数json のまま送るとオブジェクトとして送れてvar_dump でも表示できます。 ただ今はjson の勉強をしているので、できればなぜこうなっているのかを理解したいです。 基本的なところで勉強不足かもしれませんが、何かアドバイスなど頂けると嬉しいです。 よろしくお願いします。

  • javascriptでJSONを取得する方法

    C#、asp.netでJson形式の文字列をjavascriptに渡してgooglemapで使用したいです。 json.netやらDynamicJson やらがインストールされていないと使用できないのでしょうか。 aspx.cs dynamic dataSet = 取得したlist; System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); serializer.Serialize(dataSet); javascript function json() { $.ajax({ url: ××.aspx.cs, type: "get", dataType: 'json', error: function () { alert("情報の読み込みに失敗しました"); }, success: function (data) {        alert("data"); } }); } こちらでは、情報の読み込みに失敗しましたとアラートが出てしまいます。 http://qiita.com/rbtnn/items/b2ec6c7dee792e66ac75 http://aspnet.keicode.com/basic/jquery-ajax-basics.php この2つのサイトを参考にしています。 dataSetの中身に目的のリストが取得できているのは確認済みです。 何がいけないのでしょうか。 どうやったらJSONをjavascriptで読み込めるのでしょうか。 どなたかよろしくお願いします。

  • ajaxとphpでapiのデータ取得

    上手にお伝えできるか不安ですが、以下の事象の原因で考えられるものがありましたら、アドバイスいただきたいです。 [処理内容] js(ajax)でphpをたたいて、GAのapiに接続、ページビューを取得して その取得内容もとにphpで静的ファイルを生成(jsonやhtml)して、任意の箇所で表示させています。 アクセスランキングのようなものになります。 ---------------------------------------------------- jsでphp呼び出し→phpでGAにアクセス→GA→phpで受け取る→jsonやhtml生成 ---------------------------------------------------- [気になる事象] GAからのデータの取得やjsonの生成は概ねうまくいっているのですが、時にデータが取得できない時があります。 何故かphpファイルを更新する(ソースに改行を加えただけ)と正しいデータが取得できたりします。 そんなことが動作に影響するのかわからないのですが、また1日後とかにデータを取得して表示させようとすると、 phpファイルを更新しない限り前回取得した状態から更新されなくなります。 キャッシュみたいなものが介在するのかわからないのですが、ajaxの部分の記述でcashはfalseとしています。 ちなみにGAの管理画面ではページビューが取れているので、apiとphpの間が怪しいといえば怪しそうな気もしています。 尚、静的ファイル(jsonやhtml)のタイプスタンプの更新は、js(ajax)にアクセスする度に正しく行われている為、 それらのファイルの生成そのものは問題ないと思われます。 拙い説明で恐縮ですが、 どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • 複数のjsonファイルを「もっと見る」ボタンで出力

    プログラム初心者です。 Instagramからハッシュタグで画像を抽出し、「もっと見る」ボタンで少しずつHTMLに出力したいです。 ↓こちらのブログを参考にさせていただき、Instagramの画像をHTMLに出力するところまで、何とか辿り着きました。 http://blog.hello-world.jp.net/php/2777/ <script> $(function() { $.ajax({ url: "json/1.json", dataType: "json", error: function(jqXHR, textStatus, errorThrown) { $("#content").text(textStatus); }, success: function(data) { var dataArray = data; $.each(dataArray, function(i){ $("#content").append("<div><p id='" + dataArray[i].id + "'><a href='" + dataArray[i].link + "' target='_blank'><img src='" + dataArray[i].image_url + "'></a></p></div>"); }); } }); }); </script> この状態だと1枚目のjsonしか読み込んでいないので、2枚目以降のファイルも2.json、3.json…「もっと見る」ボタンで取得するようにしたいのですが、知識が足りず。。。 ↓こちらのサイトのように、スクロールで表示させるものでも良いのですが。 http://nekostagram.com/ 詳しい方、ご協力いただけるとありがたいです。 どうぞよろしくお願いいたします。m(__)m

  • jQueryで複数ファイル読み込みを検知する方法

    jQueryでHTTP通信でjsonファイルを取得する場合、 ファイルが一つだけなら $.ajax({ url: path, type: "GET", dataType: "json", success: function(json, status, xhr) { }, error: function(xhr, status, errorThrown) { }, complete: function(xhr, status) { } }); のようにsuccessコールバックなどでデータを取得すればよいのですが 複数ファイルをajax()により取得し、全てのファイルダウンロードが完了したのを 待ってから処理を走らせたい場合どうすればよいのかわかりません。 任意の型のイベントを発生させて、それに対するハンドラ割り当てができればよいのですが javascriptに不慣れなこともあり、調べてもその方法がわかりませんでした。

  • PHPでのJSONの使い方(3)

    昨日 PHPでのJSONの使い方(1)と(2)で質問させていただき、hogehoge78さんから的確な回答を頂き、問題が解決したと思って質問を締め切った者です。 頂いたアドバイス通りに会社でやったらちゃんと動いたのですが、家に帰ってブラウザーの閲覧履歴やクッキーなどをすべてクリアーした後にプログラムを走らせてみても動きません。 hogehoge78さんのアドバイスにあった様にChromeの開発者用ウィンドウを開いてエラーメッセージを見ましたら、以下のような事が出力されていました。 VM11:2 Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at XMLHttpRequest.xmlhttp.onreadystatechange (displayEnglish.php:27) 27とはファイルの行数だと思うのですが、この行は次の通りです。 if(this.readyState == 4 && this.status == 200){ 「JSON.parse で予期せぬJSON入力の終わり」とは一体どういうことなのでしょうか。 Hogehoge78さんがたまたまこの質問を見て頂いたなら、ご回答いただけると有難いです。 でももちろん、ご回答いただける方ならどなたでも歓迎いたします。 どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう