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

时间:2011-05-24 06:29:33

标签: javascript ruby json ruby-on-rails-3

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

  

REXML :: ParseException没有有效的根

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

我无法继续此错误。

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

参见下面提到的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的根元素,如下所示。

<!DOCTYPE glossary PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
 <glossary><title>example glossary</title>
  <GlossDiv><title>S</title>
   <GlossList>
    <GlossEntry ID="SGML" SortAs="SGML">
     <GlossTerm>Standard Generalized Markup Language</GlossTerm>
     <Acronym>SGML</Acronym>
     <Abbrev>ISO 8879:1986</Abbrev>
     <GlossDef>
      <para>A meta-markup language, used to create markup
languages such as DocBook.</para>
      <GlossSeeAlso OtherTerm="GML">
      <GlossSeeAlso OtherTerm="XML">
     </GlossDef>
     <GlossSee OtherTerm="markup">
    </GlossEntry>
   </GlossList>
  </GlossDiv>
 </glossary>

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

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