繁体   English   中英

JS:将字符串转换为对象

[英]JS: convert string into object

我有代码

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

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

data.newFavOfferId = ...

我怎样才能做到这一点?

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

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

如果您不信任源,那么最好指定可以使用的内容并手动解析字符串(例如,如果仅具有一个级别的属性,就不难了)。

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

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

只需删除引号

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

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

只需删除引号""

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

演示

从表面上看,这看起来像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}");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM