2016-12-05 3 views
-1

У меня есть объект JSON следующим образом:добавить уникальный идентификатор для каждой записи в объекте JSon

enter image description here

Я хотел бы для каждой записи, которая имеет атрибут title добавить уникальный идентификатор, так что мой JSON объект будет выглядеть следующим образом:

enter image description here

и в другой версии, которую я хочу, чтобы добавить уникальный идентификатор для каждой записи, так что это будет выглядеть следующим образом:

enter image description here

Как я могу это сделать?

Edit:

Это мой объект JSON: https://api.myjson.com/bins/59prd

+0

использование [ 'для ... в'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for .. .in), чтобы перебрать объект и добавить идентификатор. – LuudJacobs

+3

, пожалуйста, добавьте код/​​объекты как текст, а не как изображение. –

+0

@NinaScholz, пожалуйста, уточните мое редактирование –

ответ

1

Вы можете использовать for...in в петлю над объектом и добавить уникальные идентификаторы.

var iterator = 0; // this is going to be your identifier 

function addIdentifier(target){ 
    target.id = iterator; 
    iterator++; 
} 

function loop(obj){ 

    for(var i in obj){ 

    var c = obj[i];   

    if(typeof c === 'object'){ 

     if(c.length === undefined){ 

     //c is not an array 
     addIdentifier(c); 

     } 

     loop(c); 

    } 

    } 

} 

loop(json); // json is your input object 
+0

Я поддерживаю ваше решение, поскольку оно чище, используя рекурсию и разделяясь на повторно используемые методы. –

0

Вы можете использовать замыкание addId для обратного вызова для iterateing массива и использовать внутренний обратный вызов iter для вложенных массивов.

С вызовом addId вы можете указать индекс для начала.

function addId(id) { 
 
    return function iter(o) { 
 
     if ('title' in o) { 
 
      o.id = id++; 
 
     } 
 
     Object.keys(o).forEach(function (k) { 
 
      Array.isArray(o[k]) && o[k].forEach(iter); 
 
     }); 
 
    }; 
 
} 
 

 
var data = [{ "Arts": [{ "Performing arts": [{ "Music": [{ "title": "Accompanying" }, { "title": "Chamber music" }, { "title": "Church music" }, { "Conducting": [{ "title": "Choral conducting" }, { "title": "Orchestral conducting" }, { "title": "Wind ensemble conducting" }] }, { "title": "Early music" }, { "title": "Jazz studies" }, { "title": "Musical composition" }, { "title": "Music education" }, { "title": "Music history" }, { "Musicology": [{ "title": "Historical musicology" }, { "title": "Systematic musicology" }] }, { "title": "Ethnomusicology" }, { "title": "Music theory" }, { "title": "Orchestral studies" }, { "Organology": [{ "title": "Organ and historical keyboards" }, { "title": "Piano" }, { "title": "Strings, harp, oud, and guitar" }, { "title": "Singing" }, { "title": "Strings, harp, oud, and guitar" }] }, { "title": "Recording" }] }, { "Dance": [{ "title": "Choreography" }, { "title": "Dance notation" }, { "title": "Ethnochoreology" }, { "title": "History of dance" }] }, { "Television": [{ "title": "Television studies" }] }, { "Theatre": [{ "title": "Acting" }, { "title": "Directing" }, { "title": "Dramaturgy" }, { "title": "History" }, { "title": "Musical theatre" }, { "title": "Playwrighting" }, { "title": "Puppetry" }] }] }] }]; 
 

 
data.forEach(addId(1)) 
 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }