0

我希望在 JSON.Stringify 传递一个对象时,它会检查它是否有一个像“val”这样的字段,用于仅对那个字段进行字符串化,否则对所有内容进行字符串化。

是否可以将 JSON.Stringify 更改为仅确定的字段?

4

3 回答 3

1

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.

于 2012-11-24T12:46:05.903 回答
0

这很简单:

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 实现。

于 2012-11-24T12:36:56.423 回答
0

你可以使用一种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}"}

也可以看看

于 2012-11-24T12:37:24.057 回答