Javascript:使用reviver功能,我似乎无法改变所有的键,而数字分段
问题描述:
我只是想改变批次X中的所有键。但我似乎无法改变所有的键,因为concat。这是我从post得知的。Javascript:使用reviver功能,我似乎无法改变所有的键,而数字分段
请告诉我如何改变所有的数字键。
var batchesX = '[{"batch":"0010002033"},{"batch":"0010001917"},{"batch":"0000020026"},{"batch":"0000017734"},'+
'{"batch":"0000015376"},{"batch":"0000014442"},{"batch":"0000014434"},{"batch":"0000014426"},'+
'{"batch":"0000013280"},{"batch":"0000012078"},{"batch":"0000012075"},{"batch":"0000012072"},'+
'{"batch":"0000011530"},{"batch":"0000011527"},{"batch":"0000011342"},{"batch":"0000010989"},'+
'{"batch":"0000010477"},{"batch":"0000008097"},{"batch":"0000007474"},{"batch":"0000006989"},'+
'{"batch":"0000004801"},{"batch":"0000003566"},{"batch":"0000003565"},{"batch":"0000001392"},'+
'{"batch":"0000001391"},{"batch":"0000000356"},{"batch":"0000"},{"batch":"000"},{"batch":""},'+
'{"batch":null}]'; // 30 elements
//in JSON text
var batchi = "batch";
var obj_batchesY = JSON.parse(batchesX);
console.debug(obj_batchesY);
var obj_batchesYlength = obj_batchesY.length;
console.debug(obj_batchesYlength);
var obj_batchesX = JSON.parse(batchesX,
function(k,v)
{
for(var i=1; i <= obj_batchesYlength; i++)
{
if(k=="batch")
{
this.batchi.concat(string(i)) = v;
}
else
return v;
}
}
);
console.debug(obj_batchesX);
代码是否太长了?
非常感谢提前。 Clement
答
reviver function的返回值仅替换值。如果您需要更换钥匙,然后用stringify
和replace
的parse
调用之前,就像这样:
JSON.parse(JSON.stringify({"alpha":"zulu"}).replace('"alpha":','"omega":'))
这里是如何取代所有数字键:
function newkey()
{
return Number(Math.random() * 100).toPrecision(2) + RegExp.$1
}
//Stringify JSON
var foo = JSON.stringify({"123":"ashanga", "12":"bantu"});
//Replace each key with a random number without replacing the ": delimiter
var bar = foo.replace(/\d+("?:)/g, newkey)
//Parse resulting string
var baz = JSON.parse(bar);
确保每个更换密钥都是唯一的,因为重复键将被parse
方法删除。
对此没有解决方案? – user1739825 2013-05-10 00:51:06
对不起,但我没有得到你想要的结果。如果你的对象变成'[{batch0:“0010002033”},{batch1:“0010001917”},...]或者{batch0:“0010002033”,batch1:“0010001917”,...}'或者别的什么? – Bergi 2013-07-03 12:00:33