JSON 将 json 个字符串作为值的对象进行字符串化
JSON stringify objects with json strings already as values
可能是重复的问题,但找不到答案。我想将包含一些 JSON 字符串作为值的 javascript 对象字符串化。
例如:
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
如您所见,键 'options' 的值是一个 JSON 字符串。我想对对象 'obj' 进行字符串化,而不对内部 JSON 字符串进行双重字符串化。
除了使用 JSON 字符串解析每个值并将对象字符串化之外,是否有任何简洁明了的解决方案?
不,你不能那样做。
如果您没有对该字符串进行编码,JSON.parse 将不会 return 一个正确的字符串。
最干净的解决方案是将 JSON 用于 obj.options,并在需要时将其字符串化。
你可以这样做
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
var options =JSON.parse(obj.options);
obj.options = options;
console.log(obj);
在这种情况下,您需要先将options
解析为JSONObject
。
您可以使用以下两种方法执行此操作:
方法一:
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
obj.options = JSON.parse(obj.options);
console.log(JSON.stringify(obj));
方法二:
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
只有一次。
假设您不知道哪些属性是 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);
可能是重复的问题,但找不到答案。我想将包含一些 JSON 字符串作为值的 javascript 对象字符串化。
例如:
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
如您所见,键 'options' 的值是一个 JSON 字符串。我想对对象 'obj' 进行字符串化,而不对内部 JSON 字符串进行双重字符串化。
除了使用 JSON 字符串解析每个值并将对象字符串化之外,是否有任何简洁明了的解决方案?
不,你不能那样做。
如果您没有对该字符串进行编码,JSON.parse 将不会 return 一个正确的字符串。
最干净的解决方案是将 JSON 用于 obj.options,并在需要时将其字符串化。
你可以这样做
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
var options =JSON.parse(obj.options);
obj.options = options;
console.log(obj);
在这种情况下,您需要先将options
解析为JSONObject
。
您可以使用以下两种方法执行此操作:
方法一:
var obj = {id:1, options:"{\"code\":3,\"type\":\"AES\"}"};
obj.options = JSON.parse(obj.options);
console.log(JSON.stringify(obj));
方法二:
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
只有一次。
假设您不知道哪些属性是 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);