可能是一个重复的问题,但无法找到答案。我想将包含一些JSON字符串的javascript对象字符串化为值。
例如:
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
如您所见,键'选项'的值是一个JSON字符串。我想对对象' obj'进行字符串化,而不对内部JSON字符串进行双重字符串化。
除了使用JSON字符串解析每个值并对对象进行字符串化之外,是否有任何干净整洁的解决方案?
答案 0 :(得分:1)
不,你做不到。
如果您没有对该字符串进行编码,则JSON.parse将不会返回正确的字符串。
最干净的解决方案是使用JSON进行obj.options,并在需要时使用它进行字符串化。
答案 1 :(得分:0)
你可以这样做
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
var options =JSON.parse(obj.options);
obj.options = options;
console.log(obj);

答案 2 :(得分:0)
在这种情况下,您需要先将options
解析为JSONObject
。
您可以使用以下两种方法执行此操作:
方法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);
现在这只会stringify
options
一次。
答案 3 :(得分:0)
假设您不知道哪些属性是JSON,您可以使用JSON.stringify上的replacer函数参数来检查值是否为JSON字符串。下面的例子尝试解析try..catch中的每个字符串,所以效率不高,但应该做的伎俩(在嵌套属性上也是如此)
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
function checkVal(key,val){
if(typeof val === 'string'){
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);