2011-08-22 33 views
2

我抓住一個字符串,並使用$ .parseJSON(串),但不斷收到以下錯誤:無效的JSON,但JSON看起來是有效

uncaught exception: Invalid JSON: {"0":{"chartHtml":"<p> Slide 1</p> ","presNote":"","chartOrderIndex":0},"1":{"chartHtml":"<p> Slide 2</p> ","presNote":"","chartOrderIndex":1},"2":{"chartOrderIndex":2},"3":{"chartHtml":"<p> e 3</p> ","presNote":"","chartOrderIndex":3},"4":{"chartHtml":"<p> Slide 4</p> ","presNote":"","chartOrderIndex":4},"5":{"chartHtml":"<p> Slide 5</p> ","presNote":"","chartOrderIndex":5},"6":{"chartOrderIndex":6}} 

調試期間Firebug的結果運行slideJson.d後:

>>> slideJson.d 
"{"0":{"chartHtml":"<p> Slide 1</p> ","presNote":"","chartOrderIndex":0},"1":{"chartHtml":"<p> Slide 2</p> ","presNote":"","chartOrderIndex":1},"2":{"chartOrderIndex":2},"3":{"chartHtml":"<p> e 3</p> ","presNote":"","chartOrderIndex":3},"4":{"chartHtml":"<p> Slide 4</p> ","presNote":"","chartOrderIndex":4},"5":{"chartHtml":"<p> Slide 5</p> ","presNote":"","chartOrderIndex":5},"6":{"chartOrderIndex":6}}" 

下面是一些通話的反序列化JSON的:

function (slideJson) { 
var slideObj, jsonStr; 
if (slideJson.d) { 
    slideObj = $.parseJSON(slideJson.d); 

Ajax調用與合作得到的Json ntent類型:

$.ajax({ 
    url: 'Someurl', 
    type: "POST", 
    data: "{}", 
    dataType: "json", 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { somenamespace.loadSlides(data); } 
}); 
+0

我記得閱讀parseJSON要求鍵值與雙引號。但我無法再在文檔中找到它......嗯...... –

+1

@John Strickler:如果值是字符串值,那麼值僅在JSON中引用。 –

+1

這個問題有點誤導。返回的json實際上是有效的json,如下面ShankarSangoli所述。沒有理由使用$ .parseJSON。 –

回答

1

JSON字符串結束了含有\n\rchartHTML屬性,默認情況下由CKEDITOR .getData()方法生成的。由於我粘貼了螢火蟲的錯誤,所以他們不可見,JSON似乎是有效的,這導致我的困惑。

感謝那些回答。

4

您的JSON是有效的,檢查http://jsonlint.com/

談談你的內容類型?如果您使用的是PHP設置以下標題:

header('Content-type: application/json'); 
+2

同意。我複製了你的JSON,用反斜槓引號替換了所有的引號,將它輸入到了Chrome JS控制檯中,並且運行了JSON.parse,結果很好。 – ellisbben

1

你不必使用$.parseJSON它arelady完全形成了。嘗試直接使用它。

在問題工作demo

+0

運行console.log(typeof slideJson.d);在調試會話期間返回'string',這導致我相信它需要被解析? – Craig

+0

如果它是一個字符串,那麼你需要解析它。 – ShankarSangoli