我讨厌打开一个新问题,即使在同一个主题上已经打开了很多问题,但我真正意识到为什么这不起作用。
我正在尝试使用以下代码创建JSON对象:
var p = JSON.stringify(decodeJSON('{{post.as_json}}'))
var post = JSON.parse(p);
console.log(post); // Debug log to test if code is valid
decodeJSON
函数:
function decodeJSON(json) {
var txt = document.createElement("textarea");
txt.innerHTML = json;
return txt.value.replace(/u'/g, "'");
}
console.log(post)
返回以下JSON字符串:
{'content': 'kj fasf', 'uid': '4eL1BQ__', 'created': '07/09/2017', 'replies': [], 'tags': ['python'], 'by': {'username': 'Dorian', 'img_url': '/static/imgs/user_Dorian/beaut.jpg'}, 'likes': 0}
在浏览字符串后,我非常确定JSON是有效的,并且没有语法错误。但是,在运行JSON.parse(p)
时,我会收到一个字符串,而不是接收一个对象。可能是什么原因?
答案 0 :(得分:2)
这是因为decodeJSON
会返回一个字符串,JSON.stringify
会将字符串转换为另一个 字符串
另一方面,您在字符串上使用了JSON.strigify()
方法。您应该对对象进行字符串化,而不是字符串。
JSON.stringify()将javascript对象转换为json文本并存储它 在一个字符串中。
当您使用JSON.parse
时,您获得decodedJSON
函数返回的字符串,而非对象。
解决方案:
var p = JSON.stringify('{{post.as_json}}');
var post = JSON.parse(p);
console.log(post);
它给了我Uncaught SyntaxError:意外的令牌'在JSON中 第1位
解决方案是修改您的decodeJSON
方法。
function decodeJSON(json) {
var txt = document.createElement("textarea");
txt.innerHTML = json;
return txt.value.replace(/u'/g, '\"');
}
var p = decodeJSON('{{post.as_json}}');
var post = JSON.parse(p);
console.log(post);
答案 1 :(得分:0)
代码中的问题是您在字符串本身上执行var p = decodeJSON('{{post.as_json}}');
。所以解析这个字符串的结果将是一个字符串。实际上,您已经进行了两次字符串化并解析了一次。如果再次解析它,您将获得JSON。但是对于解决方案,请避免两次字符串化。
替换您的代码。
#int_RTCC
void RTCC_isr(void)
{
set_adc_channel(0);
delay_us(40);
unsigned int16 aD = read_adc();
aDfilter = aDfilter << 3 + aD * 2;
}
那将有效