Удалить, добавить элемент в json объект (массив)

Тема в разделе "JavaScript", создана пользователем danneo, 18 апр 2014.

Модераторы: ZiX
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    На php создал многомерный индексированный массив (вложенные массивы ассоциативные).
    Перегнал этот массив через json_encode в браузер:
    Код:
    echo var arr_data = ".json_encode( $arr_data ).";
    В браузере он вывелся. Работать можно.
    Но мне нужно сделать следующее:
    1. Удалить конкретный элемент. Номер его не известен. Известен только id.
    2. добавить новый элемент.
    Работать, как с массивом через методы не получается.
     
  2. worldx

    worldx Создатель

    Регистр.:
    12 май 2008
    Сообщения:
    20
    Симпатии:
    2
    Может не стоит мешать все и сразу, а передавать в javascript обычные массивы, разбив ассоциативные? Так же из описания не совсем понятно, какие именно массивы вы кидаете в javascript, думаю на выходе вы имеете массив объектов. И работать с ними надо соответственно(с массивами как с массивами, с объектами как с объектами).
     
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    Вот, что приходит в браузер от json_encode().
    Код:
    {"1":{"id":"1","id_user":"9","id_day":"1","start_t_minute":"600","end_t_minute":"1080","start_clock":"10:00","end_clock":"18:00"},"2":{"id":"2","id_user":"9","id_day":"2","start_t_minute":"600","end_t_minute":"1080","start_clock":"10:00","end_clock":"18:00"},"3":{"id":"3","id_user":"9","id_day":"3","start_t_minute":"600","end_t_minute":"1080","start_clock":"10:00","end_clock":"18:00"},"4":{"id":"4","id_user":"9","id_day":"4","start_t_minute":"600","end_t_minute":"1080","start_clock":"10:00","end_clock":"18:00"},"5":{"id":"5","id_user":"9","id_day":"5","start_t_minute":"660","end_t_minute":"900","start_clock":"11:00","end_clock":"15:00"},"6":{"id":"6","id_user":"9","id_day":"6","start_t_minute":"720","end_t_minute":"780","start_clock":"12:00","end_clock":"13:00"},"11":{"id":"11","id_user":"9","id_day":"1","start_t_minute":"1140","end_t_minute":"1320","start_clock":"19:00","end_clock":"22:00"}}
    
    Нужно удалять, добавлять элементы.
    А также делать перебор элементов (1,2,3,6,11,15) на проверку некоторых параметров его значений.
    Удалять то получается. Добавлять тоже получается, указав id вручную, например, "11", но не знаю как указать id автоматичеки, по нарастающей. А также не знаю как сделать перебор.

    Проще может быть перегнать весь этот цирк в обычный массив?
    Нашел код в инете по перебору, но не получилось ничего...
     
    Последнее редактирование: 19 апр 2014
  4. alffcpu

    alffcpu Создатель

    Регистр.:
    23 окт 2013
    Сообщения:
    22
    Симпатии:
    56
    Добрый день,
    var obj = <?=json_encode($data)?>; // тут вы получаете в итоге обычный javascrip объект, соответственно вы к нему можете обращаться так же как к любому объекту. те типа obj["some_id"], obj.some_id - ну я так понял вы это занете.
    Код:
    //Удалять:
    //prop_name - название свойства
    delete myJSONObject.prop_name; // или
    delete myJSONObject['prop_name'];
    
    //Добавить:
    var element ={}, cart =[];
    element.id = id;
    element.quantity = quantity;
    cart.push(element);
    
    А для перебора объекта я вот использовал примерно вот это: http://stackoverflow.com/questions/...script-object-literal-with-objects-as-members (искал в поисковике по javascript loop thru object). Может это вам поможет.

    Код:
    //Заменил немного то что по ссылке на названия другие (my_object - ваш объект полученный из json_encode)
    for (var key in my_object) {
       var obj = my_object[key];
       for (var prop in obj) {
         // важная проверка на то является ли это собственным свойством объекта на не унаследованым
         if(obj.hasOwnProperty(prop)){
           alert(prop + " = " + obj[prop]); //тут ваше действие над свойством
         }
       }
    }
    
     
  5. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    а как узнать и назначить уникальный id? В массив добавил, там автоматом ключ уникальный... а у объекта вручную приходится...
     
  6. alffcpu

    alffcpu Создатель

    Регистр.:
    23 окт 2013
    Сообщения:
    22
    Симпатии:
    56
    Может тогда стоит хранить объекты в массиве?
    var arr_data = [object1, object2, object3];

    Только не просто json_encode использовать придется, а пробежаться foreach по $arr_data и уже значения в json_encode. Получится массив с объектами. Думаю так будет удобнее, в случае необходимости добавки дополнительных элементов с уникальными ключами.
     
  7. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.463
    Симпатии:
    114
    а как получить массив объектов? Объекты то получаются при перегоне с сервера на браузер. Если на сервере это буду делать, тоже самое и выйдет, объект с объектами...
     
  8. dwarf

    dwarf Постоялец

    Регистр.:
    12 июн 2011
    Сообщения:
    88
    Симпатии:
    18
    json_encode создает javascript-массив из числовых PHP массивов и javascript-обьект из ассоциативных PHP массивов.
    В вашем случае можно сделать так:
    PHP:
    $returnValue json_encode(array(
      array(
    'id' => 1'bla' => 'bla1'),
      array(
    'id' => 2'bla' => 'bla2'),
      array(
    'id' => 3'bla' => 'bla3'),
      array(
    'id' => 4'bla' => 'bla4')
    ));
    из этого получится такой json:
    Код:
    [{"id":1,"bla":"bla1"},{"id":2,"bla":"bla2"},{"id":3,"bla":"bla3"},{"id":4,"bla":"bla4"}]
     
    Vishez нравится это.