Rails抛出“REXML :: ParseException没有有效的根”exception

我有一个JavaScript对象,并使用Douglas Crockford的JSON实用程序将其转换为JSON。 在发送后AJAX请求时,我得到:

REXML :: ParseException没有有效的根

REXML::ParseException (The document "{\"name\":\"asda\",\"deadline\":\"May 24, 2011\"}" does not have a valid root): 

我无法继续此错误。

在发出AJAX请求时,您可能发送了错误的Content-Type标头。 如果您使用标题Content-Type: application/xml发出请求,Rails将尝试将您的请求正文解析为XML,并且您将收到该错误消息。 相反,您将需要使用application/json或其他内容类型,以便Rails不会尝试解析它。 如果您使用的是jQuery,那么这是$ .ajax中的contentType设置。

JSON不需要像XML那样存在根元素。 尝试使用JSON.parse(json_string)解析它,而不是使用REXML解析它。

请参阅下面提到的json文件

 { "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML"] }, "GlossSee": "markup" } } } } } 

这里词汇表是根据xml包含整个json的根元素,如下所示。

  example glossary S   Standard Generalized Markup Language SGML ISO 8879:1986  A meta-markup language, used to create markup languages such as DocBook.         

因此我们可以说术语表是根,并且只是xml或json中的一个标记。

因此,您必须在json文件中提供一个根元素,该元素包含整个JSON文件。