2011-10-20 12 views
2

jsonデータを取得する際に問題が発生しています。私は2つの例を作りました。 1つは動作しますが、もう1つは動作しません。そして、私はどちらが必要かを推測します。うん、それは動作しないもの。ここにコードがあります。javascript JSON issue

私はjsonデータを出力するWebサービスを持っていますが、何らかの理由で文字列に余分な[]が追加されていて、一重引用符 ''もありません。 doens'tが動作しないコードを見ると、私は括弧を手動で削除していて、一重引用符を追加していることがわかります。私は文字列を書き込むdivを持っており、それは有効なJsonデータです。その文字列を受け取り、手動で新しい変数を宣言すると、jQuery.parseJSONは正常に動作します。しかし、私は新しく作成されたオブジェクトを解析しますが、動作しません。誰にもアイデアはありますか?

ワークスファイン

$.ajax({ 
    type: "POST", 
    async: false, 
    contentType: "application/json; charset=utf-8", 
    url: "StudiesWebService.asmx/EventList", 
    data: "{}", 
    dataType: "json", 
    success: function(msg) { 
     var obj = jQuery.parseJSON('{ "id": 1, "title": "Jack STuff", "start": "\/Date(1318939200000)\/", "end": "\/Date(1318950000000)\/", "allDay": false }, { "id": 2, "title": "asdfasdfasdf", "start": "\/Date(1319025600000)\/", "end": "\/Date(1319025600000)\/", "allDay": false}'); 
     var events2 = []; 
     events2.push({ 
      title: obj.title, 
      allDay: obj.allDay, 
      start: 'Tue, 18 Oct 2011 10:00:00 EST', 
      end: 'Tue, 18 Oct 2011 11:00:00 EST' 
     }); 

     callback(events2); 

    }, 
    error: function(e) { $(".external-events").html("An Error Occured" + e); } 
}); 

は動作しません:オブジェクト全体の周りの単一引用符は、単一の文字列にそれを回すだろう追加

$.ajax({ 
    type: "POST", 
    async: false, 
    contentType: "application/json; charset=utf-8", 
    url: "StudiesWebService.asmx/EventList", 
    data: "{}", 
    dataType: "json", 
    success: function(msg) { 
     var myObj = new String(msg.d); 

     myObj = myObj.replace("[", ""); 
     myObj = myObj.replace("]", ""); 
     myObj = "'" + myObj + "'"; 

     //at this point myObj output to this: 
     //'{"id":1,"title":"Mike STuff","start":"\/Date(1318939200000)\/","end":"\/Date(1318950000000)\/","allDay":false},{"id":2,"title":"asdfasdfasdf","start":"\/Date(1319025600000)\/","end":"\/Date(1319025600000)\/","allDay":false}' 

     var obj1 = jQuery.parseJSON(myObj); 
     alert(obj1.id); //alert doesn't come up 

     var events = []; 

     events.push({ 
      title: obj1.title, 
      allDay: obj1.allDay, 
      start: 'Tue, 18 Oct 2011 10:00:00 EST', 
      end: 'Tue, 18 Oct 2011 11:00:00 EST' 
     }); 

     callback(events); 
    }, 
    error: function(e) { $(".external-events").html("An Error Occured" + e); } 
}); 
+6

+1 Jason :) – yoda

+0

ありがとうございました。あなたはこのエラーを修正するだけでなく、自分のコードでいくつか修正しました。私は最近、javascriptとjqueryで作業を始めました。 vb.net環境から来て、C#とjqueryを学ぶことは私の背後にある。 – MikeB55

+0

悪いjsonを吐き出すWebサービスを制御していますか?もしそうなら、ここで補償しようとするのではなく、それを修正するのはなぜですか? –

答えて

1

それは問題ないはずです。上の例では、''が文字列を囲んでいます。彼らは実際の文字列自体の一部ではないので、彼らはあなたがどちらかのはず反復ので、それは実際には、2要素の配列([{obj1},{obj2}])を返すているためまた、あなたのJSONはその周りに[]を持っているこのmyobj

に追加する必要はありませんその配列、またはあなたが[]を削除しているのはなぜ最初の要素(obj[0]

+0

それは彼がオブジェクトの配列を受け取っているので、彼は[と]を削除しているという事実です。 – Matt

+0

それはそうしました。お手伝いありがとう。削除しなければならなかった行と置き換えるコードの両方で。 – MikeB55

+0

@Matt yeah、ちょうどそれに気づいた。固定されています –

1

...だから、おそらくそれをするつもりはありません。

角括弧がどこにあるのか分かりませんが、その中のオブジェクトが配列として扱われるため、おそらくそれらを保持したいと考えています。

1

問題は、JSONは、引用符で囲まれてはならない以下の

myObj = "'" + myObj + "'"; 

です。

[ ]文字も削除すると、配列になります。しかし、生の配列が有効なJSONではないため、すべてを処理するのではなく、分割して各要素を評価する必要があります。あなたはこのライン

myObj = "'" + myObj + "'"; 

を削除する場合

+0

彼はオブジェクトの配列を受け取っているので、彼は '['と ']'を削除しています。 – Matt

+0

コンマを忘れてしまったので、正しいですが、有効なJSONではありません。私は編集します – Ktash

+0

'{{/ * object * /}、{/ * object * /}]'を '{/ * object * /}、{/ * object * /} 'に変更しています – Matt

1
  1. を抜きますか?有効なJSONを無効なものに変換します。

    あなたが取得している応答は、({}によって示される)オブジェクトの配列([]で示される)です。あなたはそれを受け取ると、入力にjQuery.parseJSONを呼び出す離れて取得したい

    は、しかし、あなたがdataType: "json"を設定しているので、jQueryのはとてもdataはあなたが後にしているオブジェクトの配列である必要があり、あなたのためにそれを解析します。

  2. 文字列の周囲に'を追加しないでください。

  3. data: "{}"は無意味です。キー=値のペア(foo=1&bar=2、クエリ文字列のようなもの)、またはオブジェクト({foo:1, bar:2})のどちらかにすると、jQueryがjQuery文字列になります。あなたの場合、data属性を完全に省略することができます。
+0

配列が返されていることに気づくためのupvote –

+0

jsonを検証しようとしたために[]を削除していました。私はすべての括弧を削除しました。 – MikeB55

0

を調べて、解析する前にjsonが適切にフォーマットされていることを確認してください。あなたのコメントに「動作していない」バージョンの文字列が正しくフォーマットされていない - 「[...]」で囲む必要があります。