JSON.parse在控制台中工作,但在运行脚本时不起作用

时间:2018-01-10 03:07:10

标签: javascript

所以这是我的文字:

handleMyKeys(res) {
    // console.log(res);
    console.log("text" + this.responseText); //line 12
    let json = JSON.parse(this.responseText);
    console.log("Output is" + json.keys); //line 14
    console.log(window.mykeys);
    if (json.keys) {
      window.mykeys.setState({keys: json.keys});
    }

  }

它为json.keys打印出undefined。

但是,当我在控制台中运行相同的操作时,我获得了一个带有.keys属性的有效JSON对象。为什么呢?

"{\"keys\":[\"itchio\",\"quantumitch\"]}"  MyKeys.js:12
Output isundefined  MyKeys.js:14
Object { props: Object, context: Object, refs: Object, updater: Object, _reactInternalFiber: Object, _reactInternalInstance: Object, state: Object }  MyKeys.js:15
x = "{\"keys\":[\"itchio\",\"quantumitch\"]}";
"{"keys":["itchio","quantumitch"]}"
JSON.parse("{\"keys\":[\"itchio\",\"quantumitch\"]}");
Object { keys: Array[2] }
y = JSON.parse("{\"keys\":[\"itchio\",\"quantumitch\"]}")
Object { keys: Array[2] }
y.keys
Array [ "itchio", "quantumitch" ]

2 个答案:

答案 0 :(得分:1)

根据您的控制台输出,您的输入看起来已被编码两次。

比较以下两个语句的控制台输出:



console.log("{\"keys\":[\"itchio\",\"quantumitch\"]}");
console.log("\"{\\\"keys\\\":[\\\"itchio\\\",\\\"quantumitch\\\"]}\"");




第二个命令的输出对应于您在控制台中看到的内容,表示您正在处理的字符串已转义两次。

检查您收到的回复内容,或执行typeof JSON.parse(this.responseText)验证。

答案 1 :(得分:0)

可能您必须写resres.responseText而不是this.responseText。 (取决于res是什么。)