使用JSON.stringify 和replacer 回调来实现:
function replacer(match, offset, fullstring)
{
return replacer.str;
}
replacer.str = "\u0022filterValues\u0022:[\u0022hi\u0022,\u0022bye\u0022]"; /* Use DOM node value */
var foo = JSON.stringify({
"Region": {
"filterField": "kw_Region",
"filterValues": [
"aa",
"bb"
]
},
"ApplicationName": {
"filterField": "kw_ApplicationName",
"filterValues": [
"aa",
"bb"
]
},
"IssueType": {
"filterField": "kw_IssueType",
"filterValues": [
"aa",
"bb"
]
},
"Outage": {
"filterField": "kw_Outage",
"filterValues": [
"aa",
"bb"
]
},
"Priority": {
"filterField": "kw_Priority",
"filterValues": [
"aa",
"bb"
]
}
}).replace(/"filterValues[^\]]+./g, replacer)
这里是关于序列化和转换的两种 JSON 方法的一些文档,stringify 和 parse:
JSON.parse(source, reviver)
此方法解析 JSON 文本以生成对象或数组。它可以抛出一个 SyntaxError 异常。
可选的 reviver 参数是一个可以过滤和转换结果的函数。它接收每个键和值,并使用其返回值而不是原始值。如果它返回它收到的内容,那么结构不会被修改。如果返回 undefined 则删除该成员。
最终使用空字符串和最高值调用 reviver 以允许转换最高值。一定要正确处理这种情况,通常通过返回提供的值,否则 JSON.parse 将返回 undefined。
if (k === "") return v
JSON.stringify(值、替换器、空格)
stringify 方法从 JavaScript 值生成 JSON 文本。如果 value 是对象或数组,则将递归访问该结构以确定每个成员或元素的序列化。结构不能是周期性的。
当找到一个对象值时,如果该对象包含一个toJSON方法,就会调用它的toJSON方法,并将结果字符串化。 toJSON 方法不序列化:它返回由应该序列化的名称/值对表示的值,如果不应该序列化,则返回 undefined。 toJSON 方法将传递与值关联的键,并将其绑定到持有该键的对象。
您可以提供可选的替换方法。它将传递每个成员的键和值,并将 this 绑定到包含对象。从您的方法返回的值将被序列化。如果您的方法返回 undefined,则该成员将被排除在序列化之外。
如果replacer参数是一个数组,那么它将用于选择要序列化的成员。它过滤结果,使得只有替换器数组中列出的键的成员才被字符串化。
没有 JSON 表示的值,例如未定义或函数,将不会被序列化。对象中的此类值将被删除;在数组中,它们将被替换为 null。您可以使用替换函数将那些替换为 JSON 值。 JSON.stringify(undefined) 返回未定义。
可选的空格参数产生一个字符串化的值,用换行符和缩进填充以使其更易于阅读。
如果空格参数是非空字符串,则该字符串将用于缩进。如果空格参数是一个数字,那么缩进就是那么多空格。
var alias = {"Clark":"","phone":""};
function kryptonite(key)
{
var replacement = {};
for(var cursor in this)
{
if(cursor in alias)
replacement[cursor] = this[cursor]
}
return replacement;
}
var contact = {
"Clark":"Kent",
"Kal El":"Superman",
"phone":"555-7777"
}
contact.toJSON = kryptonite;
var foo = JSON.stringify(contact) // "{"Clark":"Kent","phone":"555-7777"}"
参考文献