Javascript 删除JSON数组的重复键并获取其JSON路径
我的JSON如下所示: {“回复”:{“结果”:{“线索”:{“行”:[{“LEADID”:“8497300000063017”,“SMOWNERID”:“8497300000061001”},{“LEADID”:“8497300000063015”,“SMOWNERID”:“8497300000061001”,“HIII”:“你好”},{“LEADID”:“8497300000063007”,“SMOWNERID”:“8497300000061001”,“BYEE”:“tata”},{“LEADID”:“8497300000630005”,“SMOWNERID”:“84300000061001”{“849730000000063003”、“SMOWNERID”:“849730000000061001”},{“LEADID”:“849730000000063001”、“SMOWNERID”:“849730000000061001”}},},},uri:“/crm/private/json/Leads/getMyRecords”} 我需要获取JSON路径,为此我使用了以下代码:Javascript 删除JSON数组的重复键并获取其JSON路径,javascript,arrays,json,node.js,key,Javascript,Arrays,Json,Node.js,Key,我的JSON如下所示: {“回复”:{“结果”:{“线索”:{“行”:[{“LEADID”:“8497300000063017”,“SMOWNERID”:“8497300000061001”},{“LEADID”:“8497300000063015”,“SMOWNERID”:“8497300000061001”,“HIII”:“你好”},{“LEADID”:“8497300000063007”,“SMOWNERID”:“8497300000061001”,“BYEE”:“tata”},{“LEA
var str={"response":{"result":{"Leads":{"row":[{"LEADID":"849730000000063017","SMOWNERID":"849730000000061001",},
{"LEADID":"849730000000063015","SMOWNERID":"849730000000061001"},
{"LEADID":"849730000000063007","SMOWNERID":"849730000000061001","HIII":"hello"},
{"LEADID":"849730000000063005","SMOWNERID":"849730000000061001","BYEE":"tata"},
{"LEADID":"849730000000063003","SMOWNERID":"849730000000061001"},
{"LEADID":"849730000000063001","SMOWNERID":"849730000000061001"}]}},
"uri":"/crm/private/json/Leads/getMyRecords"}}
var keys = [];
getKeys(keys,str, '');
for(var i=0; i<keys.length; i++) {
var d=new Array();
d=keys[i][1].replace(/^\.|\.$/g, '')
console.log(keys[i][0] + '=' +d)
}
function getKeys(keys, obj, path) {
for(key in obj) {
var currpath = path+'.'+key;
keys.push([key, currpath]);
if(typeof(obj[key]) === 'object') {
getKeys(keys, obj[key], currpath);
}
}
}
数组元素键是重复的(即)LEADID和SMOWNERID在数组中是重复的。我想删除整个数组的重复项并显示如下输出:
response=response
result=response.result
Leads=response.result.Leads
row=response.result.Leads.row
0=response.result.Leads.row.0
LEADID=response.result.Leads.row.0.LEADID
SMOWNERID=response.result.Leads.row.0.SMOWNERID
HIII=response.result.Leads.row.0.HIII
BYEE=response.result.Leads.row.0.BYEE
uri=response.uri
我被困在这里,任何关于这方面的帮助都会非常有用。将函数
getKeys
修改为:
function getKeys(keys, obj, path) {
for(key in obj) {
var currpath = path+'.'+key;
keys.push([key, currpath]);
if(typeof(obj[key]) === 'object') {
if(obj[key] instanceof Array){ //added check for array
keys.push(['0', currpath+'.0']);
getKeys(keys, obj[key][0], currpath+'.0');
}
else
getKeys(keys, obj[key], currpath);
}
}
}
更新
答案与您想要的不完全一样,但却是我能得到的最接近的答案。此外,您为HIII和BYEE提供的值是错误的。最后,在不同级别上可能有相同的键,但我只匹配键的名称。如果在不同级别上使用相同的键名,则可能不起作用。另一种方法是将键更改为object from array-将
var-keys=[]
更改为var-keys={}
,然后更改getKeys方法,如下所示:
function getKeys(keys, obj, path) {
for(key in obj) {
var currpath = path+'.'+key;
if(keys[key])
continue;
keys[key] = currpath;
if(typeof(obj[key]) === 'object') {
getKeys(keys, obj[key], currpath);
}
}
}
现在,您还需要更改从getKeys返回后打印值的方式,因为现在keys不是数组而是对象。:此代码可以工作,但它只打印数组第一个实例的值。如果第二个和第三个实例中有不同的键,我只想防止数组中的重复,该怎么办是gud的起点。如果您对上述问题有任何想法,请提出解决方案
function getKeys(keys, obj, path) {
for(key in obj) {
var currpath = path+'.'+key;
addKeys(key, currpath);
//keys.push([key, currpath]);
if(typeof(obj[key]) === 'object') {
getKeys(keys, obj[key], currpath);
}
}
}
function addKeys(key, currpath) { //check before adding
present = keys.map(function(x){return(x[1].split('.').slice(-1)[0])});
if (present.indexOf(key)==-1){
keys.push([key, currpath]);
}
}
function getKeys(keys, obj, path) {
for(key in obj) {
var currpath = path+'.'+key;
if(keys[key])
continue;
keys[key] = currpath;
if(typeof(obj[key]) === 'object') {
getKeys(keys, obj[key], currpath);
}
}
}