0

JSON.Stringifyでオブジェクトを渡すときに、そのフィールドのみを文字列化するための「val」のようなフィールドがあるかどうかをチェックし、そうでない場合はすべて文字列化する必要があります。

JSON.Stringifyを決定されたフィールドのみの文字列に変更することは可能ですか?

4

3 に答える 3

1

偽の値に注意する必要があります。

function my_json_stringify(obj) {
  return JSON.stringify(obj.hasOwnProperty("val") ? obj.val : obj);
}

そうでなければ、それは次のようなものに間違った結果を提供するでしょう

{
    val: ""
}

hasOwnProperty ここに示すように、クロスブラウザソリューションを含める必要がある場合があります。

于 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 に答える