JS:将字符串转换为对象

时间:2014-01-15 10:00:07

标签: javascript

我有代码

data = "{isShowLoginPopup:true,newFavOfferId:1486882}";

我想将它转换为JS对象(不是JSON)并以这种方式使用它:

data.newFavOfferId = ...

我该怎么做?

4 个答案:

答案 0 :(得分:2)

如果您的来源是可信的,最简单的解决方案是使用eval

data = eval('('+data+')');

如果您不信任源,那么您最好指定您可以拥有的内容并手动解析字符串(例如,如果您只有一个级别的属性,则非常难)。

另一种解决方案(取决于您的实际数据)是通过插入缺少的引号将您的数据更改为JSON:

data = JSON.parse(datareplace(/({|,)\s*([^:,}{]+)\s*(:)/g,'$1"$2"$3'));

答案 1 :(得分:1)

只需删除引号

即可
data = {
    isShowLoginPopup:true,
    newFavOfferId:1486882
};

小提琴:http://jsfiddle.net/QpZ4j/

答案 2 :(得分:1)

只需从

中删除引号""即可
data = "{isShowLoginPopup:true,newFavOfferId:1486882}";

DEMO

答案 3 :(得分:0)

虽然表面上看起来像JSON数据,但它格式不正确,因此它不能直接与JSON.parse()一起使用。这是因为JSON对象需要将键包装在引号中...

因此:

"{isShowLoginPopup:true,newFavOfferId:1486882}"

作为有效的JSON应该是:

"{\"isShowLoginPopup\":true,\"newFavOfferId\":1486882}"

所以你所拥有的实际上是一个JavaScript对象,而不是JSON,但是你遇到的问题是这是一个JavaScript对象作为字符串文字。如果这是硬编码,那么您只需要从字符串的开头和结尾删除 "

var data = {isShowLoginPopup:true,newFavOfferId:1486882};

如果此对象是序列化的并且需要从/向服务器等传输,那么实际上,它需要作为JSON格式的字符串传输,然后可以将其反序列化为JavaScript对象。

var data = JSON.parse("{\"isShowLoginPopup\":true,\"newFavOfferId\":1486882}");