2011-08-22 78 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