JSON.Stringifyでオブジェクトを渡すときに、そのフィールドのみを文字列化するための「val」のようなフィールドがあるかどうかをチェックし、そうでない場合はすべて文字列化する必要があります。
JSON.Stringifyを決定されたフィールドのみの文字列に変更することは可能ですか?
JSON.Stringifyでオブジェクトを渡すときに、そのフィールドのみを文字列化するための「val」のようなフィールドがあるかどうかをチェックし、そうでない場合はすべて文字列化する必要があります。
JSON.Stringifyを決定されたフィールドのみの文字列に変更することは可能ですか?
偽の値に注意する必要があります。
function my_json_stringify(obj) {
return JSON.stringify(obj.hasOwnProperty("val") ? obj.val : obj);
}
そうでなければ、それは次のようなものに間違った結果を提供するでしょう
{
val: ""
}
hasOwnProperty
ここに示すように、クロスブラウザソリューションを含める必要がある場合があります。
それは非常に簡単です:
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}"}