2011-10-20 25 views
2

我在使用json數據時遇到問題。我創建了2個例子。一個工作,但另一個不工作。並猜測我需要哪一個?是的,那個不起作用。這是代碼。javascript json問題

我有一個web服務,輸出json數據,但由於某種原因它添加了額外的括號[]到字符串,它也缺少單引號''。如果您查看不起作用的代碼,您會看到我手動刪除了括號並添加了單引號。我有一個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

,如果你刪除此行

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

應該罰款。在上面的示例中,''包含字符串。它們實際上並不是字符串本身的一部分,因此它們不需要添加到myObj中,因此它們不需要添加到myObj中。另外,由於它實際上返回了2個元素的數組([{obj1},{obj2}]),所以您應該迭代該數組,或拉出第一個元素(obj[0]

+0

這也是他刪除[和]的原因,因爲他正在接收一組對象。 – Matt

+0

這樣做。感謝您的幫助。無論是我必須刪除和替換代碼。 – MikeB55

+0

@Matt是的,只是注意到了。它是固定的 –

1

添加圍繞整個對象的單引號將它變成一個字符串...所以你可能不要這麼做。

我不確定括號是在哪裏刪除,但您可能想保留這些,因爲它們中的對象將被視爲一個數組。

1

的問題如下

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

JSON不應該用引號括起來。

您還將刪除[ ]字符,這將使其成爲一個數組。然而,就目前而言,您會希望將其拆分並評估每個片段,而不是嘗試全部處理它,因爲原始數組不是有效的JSON。

+0

這也是他刪除'['和']'的原因,因爲他正在接收一組對象。 – Matt

+0

錯過了使它成爲數組的逗號,所以你是正確的,但它不是有效的JSON。我將編輯 – Ktash

+0

它將'[{/ * object * /},{/ * object * /}]'改成'{/ * object * /},{/ * object * /}' – Matt

1
  1. 你爲什麼要去掉[]?你將有效的JSON轉換成無效的東西。

    你得到的響應是一個陣列的對象(由{}表示)(由[]表示)。

    你會逃脫呼籲jQuery.parseJSON輸入你收到它,但是因爲你已經設置的dataType: "json",jQuery的解析它給你,所以data應該是對象的數組你之後。

  2. 您不應該在字符串周圍添加'

  3. data: "{}"是沒有意義的。你希望它是一串key = value對(foo=1&bar=2,就像查詢字符串),或者是一個對象({foo:1, bar:2}),jQuery將爲你變成一個jQuery字符串。在你的情況下,你可以完全省略data屬性。
+0

upvote注意到數組正在返回 –

+0

我正在移除[],因爲我試圖驗證json,並且它一直保持爲無效狀態,似乎只有一次我刪除了所有確認的括號。 – MikeB55

0

檢出jsonlint.com驗證您的json格式是否正確,然後再嘗試解析它。您在評論中的「不工作」版本中所使用的字符串格式不正確 - 需要將其封裝在「[...]」中。