2017-06-12 200 views
4

可能是重复的问题,但无法找到答案。我想将包含一些JSON字符串的JavaScript对象串化为值。JSON使用json字符串将对象字符串化为值

例如:

var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"}; 

正如你看到的,关键 '选择' 的值是一个JSON字符串。我想将对象'obj'字符串化,而不需要对内部JSON字符串进行双重字符串化。

除了使用JSON字符串解析每个值并将对象字符串化以外,是否有任何干净整洁的解决方案?

+0

唯一的清洁方式是为了避免首先混合JSON和JavaScript对象。 – str

+1

我非常好奇你如何最终以JSON结构中的转义JSON字符串结束。理想情况下,'obj.options'应该是JSON对象,而不是当前情况下的字符串。不幸的是,如果你不能改变它,但你知道哪些属性是JSON,哪些不属于,你可以在属性上使用'JSON.parse()',替换字符串值,然后调用'JSON.stringify()'。 – KevinLH

+0

您是否知道对象的哪些属性包含字符串化的JSON? – PeterMader

回答

1

不,你不能那样做。
如果你没有编码该字符串,JSON.parse将不会返回正确的字符串。

最简单的解决方案是使用JSON作为obj.options,并在需要时使用它进行字符串化。

1

你可以做这样的

var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"}; 
 

 
var options =JSON.parse(obj.options); 
 

 
obj.options = options; 
 

 
console.log(obj);

0

在这种情况下,你需要分析optionsJSONObject第一。 为此,您可以使用以下两种方法:

方法1:

var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"}; 
obj.options = JSON.parse(obj.options); 
console.log(JSON.stringify(obj)); 

方法2:

var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"}; 

var result = JSON.stringify(obj, function(key, val) { 
    if (key === "options"){ 
      return JSON.parse(val); 
     }else{ 
      return val; 
     } 
}); 

console.log(result); 

现在,这将stringifyoptions只有一次。

+0

“to JSON” - ** from ** not ** to **! – Quentin

0

假设您不知道哪些属性是JSON,那么可以使用JSON.stringify上的replacer函数参数来检查值是否是JSON字符串。下面的例子试图解析在try..catch内的每个字符串,所以是不是最有效的,但应该做的伎俩(嵌套性以及)

var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"}; 
 

 
function checkVal(key,val){ 
 
\t if(typeof val === 'string'){ 
 
\t \t try{return JSON.parse(val);}catch(e){} 
 
    } 
 
    return val; 
 
} 
 

 
var res = JSON.stringify(obj,checkVal); 
 

 
console.log('normal output', JSON.stringify(obj)) 
 
console.log('with replacer', res);

相关问题