我希望在 JSON.Stringify 传递一个对象时,它会检查它是否有一个像“val”这样的字段,用于仅对那个字段进行字符串化,否则对所有内容进行字符串化。
是否可以将 JSON.Stringify 更改为仅确定的字段?
我希望在 JSON.Stringify 传递一个对象时,它会检查它是否有一个像“val”这样的字段,用于仅对那个字段进行字符串化,否则对所有内容进行字符串化。
是否可以将 JSON.Stringify 更改为仅确定的字段?
You need to watch out for falsy values:
function my_json_stringify(obj) {
return JSON.stringify(obj.hasOwnProperty("val") ? obj.val : obj);
}
Otherwise, it is going to provide wrong results for things like
{
val: ""
}
You may need to include some cross-browser solution for hasOwnProperty
as shown here.
这很简单:
function my_json_stringify(obj) {
return JSON.stringify("val" in obj ? obj.val : obj);
}
console.log(my_json_stringify({ a: 1, b: 2})); // => {"a":1,"b":2}
console.log(my_json_stringify({ val: { a : 3, b: 4 }, other: 5}));
// => {"a":3,"b":4}
您通常不得修改系统功能。这是个非常糟糕的主意。但是如果你必须这样做,它可以这样做:
JSON.original_stringify = JSON.stringify;
JSON.stringify = function(obj) {
return JSON.original_stringify(obj.val ? obj.val : obj);
}
至少,它可以在 Firefox 中运行。但我不知道它是否适用于任何其他 JS 实现。
你可以使用一种replacer
方法。
var myObj = {a:1,b:2,c:3,d:4,e:5}
,myObjStr = JSON.stringify(myObj,censor);
//=> myObjStr now: "{"a":1,"b":2,"c":3}"
function censor(key,val){
return !key ? val : val>3 ? undefined : val;
}
如果我正确理解了您的问题,则在您的情况下,您可以使用以下内容:
var myObj = {a:{val:1},b:{val:2},c:3,d:null,e:'noval'}
,myObjStr = JSON.stringify(
myObj,
function(key,val){
return !key
? val
: val && val.val
? JSON.stringify(val)
: undefined;
});
//=> myObjStr: {"a":"{\"val\":1}","b":"{\"val\":2}"}