JSON.parse()返回一个字符串而不是object

时间:2017-09-26 14:38:55

标签: javascript json

我讨厌打开一个新问题,即使在同一个主题上已经打开了很多问题,但我真正意识到为什么这不起作用。

我正在尝试使用以下代码创建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)时,我会收到一个字符串,而不是接收一个对象。可能是什么原因?

2 个答案:

答案 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;
}

那将有效