我有代码
data = "{isShowLoginPopup:true,newFavOfferId:1486882}";
我想将它转换为JS对象(不是JSON)并以这种方式使用它:
data.newFavOfferId = ...
我该怎么做?
答案 0 :(得分:2)
如果您的来源是可信的,最简单的解决方案是使用eval
:
data = eval('('+data+')');
如果您不信任源,那么您最好指定您可以拥有的内容并手动解析字符串(例如,如果您只有一个级别的属性,则非常难)。
另一种解决方案(取决于您的实际数据)是通过插入缺少的引号将您的数据更改为JSON:
data = JSON.parse(datareplace(/({|,)\s*([^:,}{]+)\s*(:)/g,'$1"$2"$3'));
答案 1 :(得分:1)
答案 2 :(得分:1)
答案 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}");