JSON使用json字符串将对象作为值进行字符串化

时间:2017-06-12 09:35:06

标签: javascript json parsing object stringify

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

例如:

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

如您所见,键'选项'的值是一个JSON字符串。我想对对象' obj'进行字符串化,而不对内部JSON字符串进行双重字符串化。

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

4 个答案:

答案 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);