【问题标题】:Javascript prototype returning value is undefined even though it's correct in the prototype methodJavascript原型返回值未定义,即使它在原型方法中是正确的
【发布时间】:2014-07-11 18:43:12
【问题描述】:

我正在尝试创建一个将 xml 转换为 json 的简单方法。我正在尝试使用 javascript 的原型来做到这一点,因为我正在尝试学习如何使用原型,并且因为我希望能够做类似myXmlString.toJson();

我有下面的脚本,它演示了 xml 字符串在方法内部很好地转换为 json 对象,但是当我尝试调用该方法时它是未定义的。

var parseString = require('xml2js').parseString;  // Used to parse the returned xml (ick) to json (yum)

String.prototype.toJson = function() {
  parseString(this, {explicitArray: false}, function (err, jsonResult) {

    if(err) {
      console.log('err');
      console.log(err);
      return err;
    }

    console.log('inside toJSON');
    console.log(jsonResult); // <-- Prints a json object as expected

    return jsonResult;
  });
}

var mystring = '<parent><child>3</child></parent>';
console.log(mystring); // Prints an xml string

mystring.toJson(); // Should this convert the variable mystring to a json structure?
console.log(mystring); // Prints the xml string
console.log(mystring.toJson()); // Prints undefined. Why?

【问题讨论】:

  • 您最终将花费数周的时间编写一个合适的 XML 解析器,而您应该只使用内置的解析器。现代浏览器有一个DOMParser,使用它来获取一个DOM,然后将所有元素及其属性解析为一个对象,并使用JSON.stringify。
  • @adeneo,平心而论,看起来他并没有在浏览器中运行它。不过,我同意你的观点,应该使用适当的解析器。
  • 我在后端 REST 服务器中将它作为 node.js 脚本运行。

标签: javascript xml json node.js


【解决方案1】:

在你的 toJson 方法中,你应该返回 parseString 返回的值。目前,您只需执行 parseString 而不返回它返回的值。

【讨论】:

  • 我有return jsonResult;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多