删除JSON数组的重复键并获取其JSON路径
Removing the duplicate keys of a JSON array and getting its JSON path
我有JSON如下:
{"响应":{"结果":{"领导":{"行":[{"LEADID":"849730000000063017","SMOWNERID":"849730000000061001"},{"LEADID":"849730000000063015","SMOWNERID":"849730000000061001","HIII":"你好"},{"LEADID":"849730000000063007","SMOWNERID":"849730000000061001","BYEE":"塔塔"},{"LEADID":"849730000000063005","SMOWNERID":"849730000000061001"},{"LEADID":"849730000000063003","SMOWNERID":"849730000000061001"},{"LEADID":"849730000000063001","SMOWNERID":"849730000000061001"}]}},"uri":"私人/json/导致//crm/getMy记录"}}
我需要获得JSON路径,为此我使用了下面的代码:
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);
}
}
}
输出如下:
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
1=response.result.Leads.row.1
LEADID=response.result.Leads.row.1.LEADID
SMOWNERID=response.result.Leads.row.1.SMOWNERID
HIII=response.result.Leads.row.1.HIII
2=response.result.Leads.row.2
LEADID=response.result.Leads.row.2.LEADID
SMOWNERID=response.result.Leads.row.2.SMOWNERID
BYEE=response.result.Leads.row.2.BYEE
3=response.result.Leads.row.3
LEADID=response.result.Leads.row.3.LEADID
SMOWNERID=response.result.Leads.row.3.SMOWNERID
4=response.result.Leads.row.4
LEADID=response.result.Leads.row.4.LEADID
SMOWNERID=response.result.Leads.row.4.SMOWNERID
5=response.result.Leads.row.5
LEADID=response.result.Leads.row.5.LEADID
SMOWNERID=response.result.Leads.row.5.SMOWNERID
uri=response.uri
数组元素键是重复的(即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);
}
}
}
更新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]);
}
}
答案不完全像你想要的,但这是我能得到的最接近的答案。此外,你给HIII和BYEE的值是错误的。最后,可能在不同的级别上有相同的键,但我只匹配键的名称。如果在不同级别使用相同的keyname,则可能无法工作。
另一种方法是将键从数组更改为对象-将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不是一个数组,而是一个对象。
- JSON获取用户id's在嵌套数组中
- JSON:获取映射数据
- Jquery从JSON获取数据(未定义)
- 从 JSON 获取键值对而不使用 .(DOT) 在 Java 脚本或 jquery 中
- Django 使用 JSON 获取模型方法的值
- TypeError: 使用 Jquery JSON 获取数据时无效的 'in' 操作数 obj
- JSON获取地理位置在HTML中未返回值
- 从javascript中的JSON获取位置
- Angular Js无法使用浮点形式json获取int
- AngularJS,从json获取单个帖子
- 在服务器端创建html元素VS将数据作为JSON获取,并使用javascript创建标签
- 无效的“in”操作数 obj JQUERY - 尝试从 JSON 获取数据时出现类型错误
- 无法从 JSON 获取值
- 如何将动态数据从JSON获取到jvqmaps中,作为对象而不是来自php mysqli的数组
- 在 react.js 中从 Json 获取数据
- 从特定索引开始从 json 获取字符串值
- 如何在变量中存储从 JSON 获取的数据
- 无法从 JSON 获取数据
- 如何将 API 请求中的 JSON 获取到页面的 javascript 中
- 网格堆栈.js从 JSON 获取位置