За последние 24 часа нас посетили 17612 программистов и 1668 роботов. Сейчас ищут 1580 программистов ...

"почистить" JSON и передать его

Тема в разделе "JavaScript и AJAX", создана пользователем Koc, 23 окт 2008.

  1. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    Добрый день. Есть у нас скрипт, возвращающий JSON-данные.

    оттакие, например:
    [{"attributes":{"data":"type: 'file'","class":"leaf","id":"a-1"},"data":"atr-1","icons":"url(img/g.png)"},{"attributes":{"data":"type: 'file'","class":"leaf","id":"a-2"},"data":"atr-2","icons":"url(img/g.png)"},{"attributes":{"data":"type: 'folder', valid_children: ['file']","state":"open","class":"open","id":"g-1"},"data":"group-1","icons":"url(img/f.png)","children":[{"attributes":{"data":"type: 'file'","class":"leaf","id":"sa-1"},"data":"sub-atr-1","icons":"url(img/g.png)"},{"attributes":{"data":"type: 'file'","class":"last leaf","id":"sa-2"},"data":"sub-atr-2","icons":"url(img/g.png)"}]},{"attributes":{"data":"type: 'folder', valid_children: ['file']","state":"open","class":"open","id":"g-2"},"data":"group-2","icons":"url(img/f.png)","children":[{"attributes":{"data":"type: 'file'","class":"leaf","id":"sa-3"},"data":"sub-atr-3","icons":"url(img/g.png)"},{"attributes":{"data":"type: 'file'","class":"last leaf","id":"sa-4"},"data":"sub-atr-4","icons":"url(img/g.png)"}]},{"attributes":{"data":"type: 'folder'","class":"open last"},"data":"1133","icons":"none","children":[{"attributes":{"data":"type: 'file'","class":"leaf last","id":"a-3"},"data":"atr-3","icons":"url(img/g.png)"}]}]
    или в красивом виде вот так:
    Код (Text):
    1.     '0' ...
    2.         'attributes' ...
    3.             'data' => "type: 'file'"
    4.             'class' => "leaf"
    5.             'id' => "a-1"
    6.             'undefined' => "undefined"
    7.             'getNamedItem' => "undefined"
    8.             'setNamedItem' => "undefined"
    9.             'removeNamedItem' => "undefined"
    10.             'item' => "undefined"
    11.             'getNamedItemNS' => "undefined"
    12.             'setNamedItemNS' => "undefined"
    13.             'removeNamedItemNS' => "undefined"
    14.         'data' => "atr-1"
    15.         'icons' => "url(img/g.png)"
    16.     '1' ...
    17.         'attributes' ...
    18.             'data' => "type: 'file'"
    19.             'class' => "leaf"
    20.             'id' => "a-2"
    21.             'undefined' => "undefined"
    22.             'getNamedItem' => "undefined"
    23.             'setNamedItem' => "undefined"
    24.             'removeNamedItem' => "undefined"
    25.             'item' => "undefined"
    26.             'getNamedItemNS' => "undefined"
    27.             'setNamedItemNS' => "undefined"
    28.             'removeNamedItemNS' => "undefined"
    29.         'data' => "atr-2"
    30.         'icons' => "url(img/g.png)"
    31.     '2' ...
    32.         'attributes' ...
    33.             'data' => "type: 'folder', valid_children: ['file']"
    34.             'state' => "open"
    35.             'class' => "open"
    36.             'id' => "g-1"
    37.             'undefined' => "undefined"
    38.             'getNamedItem' => "undefined"
    39.             'setNamedItem' => "undefined"
    40.             'removeNamedItem' => "undefined"
    41.             'item' => "undefined"
    42.             'getNamedItemNS' => "undefined"
    43.             'setNamedItemNS' => "undefined"
    44.             'removeNamedItemNS' => "undefined"
    45.         'data' => "group-1"
    46.         'icons' => "url(img/f.png)"
    47.         'children' ...
    48.             '0' ...
    49.                 'attributes' ...
    50.                     'data' => "type: 'file'"
    51.                     'class' => "leaf"
    52.                     'id' => "sa-1"
    53.                     'undefined' => "undefined"
    54.                     'getNamedItem' => "undefined"
    55.                     'setNamedItem' => "undefined"
    56.                     'removeNamedItem' => "undefined"
    57.                     'item' => "undefined"
    58.                     'getNamedItemNS' => "undefined"
    59.                     'setNamedItemNS' => "undefined"
    60.                     'removeNamedItemNS' => "undefined"
    61.                 'data' => "sub-atr-1"
    62.                 'icons' => "url(img/g.png)"
    63.             '1' ...
    64.                 'attributes' ...
    65.                     'data' => "type: 'file'"
    66.                     'class' => "last leaf"
    67.                     'id' => "sa-2"
    68.                     'undefined' => "undefined"
    69.                     'getNamedItem' => "undefined"
    70.                     'setNamedItem' => "undefined"
    71.                     'removeNamedItem' => "undefined"
    72.                     'item' => "undefined"
    73.                     'getNamedItemNS' => "undefined"
    74.                     'setNamedItemNS' => "undefined"
    75.                     'removeNamedItemNS' => "undefined"
    76.                 'data' => "sub-atr-2"
    77.                 'icons' => "url(img/g.png)"
    78.     '3' ...
    79.         'attributes' ...
    80.             'data' => "type: 'folder', valid_children: ['file']"
    81.             'state' => "open"
    82.             'class' => "open"
    83.             'id' => "g-2"
    84.             'undefined' => "undefined"
    85.             'getNamedItem' => "undefined"
    86.             'setNamedItem' => "undefined"
    87.             'removeNamedItem' => "undefined"
    88.             'item' => "undefined"
    89.             'getNamedItemNS' => "undefined"
    90.             'setNamedItemNS' => "undefined"
    91.             'removeNamedItemNS' => "undefined"
    92.         'data' => "group-2"
    93.         'icons' => "url(img/f.png)"
    94.         'children' ...
    95.             '0' ...
    96.                 'attributes' ...
    97.                     'data' => "type: 'file'"
    98.                     'class' => "leaf"
    99.                     'id' => "sa-3"
    100.                     'undefined' => "undefined"
    101.                     'getNamedItem' => "undefined"
    102.                     'setNamedItem' => "undefined"
    103.                     'removeNamedItem' => "undefined"
    104.                     'item' => "undefined"
    105.                     'getNamedItemNS' => "undefined"
    106.                     'setNamedItemNS' => "undefined"
    107.                     'removeNamedItemNS' => "undefined"
    108.                 'data' => "sub-atr-3"
    109.                 'icons' => "url(img/g.png)"
    110.             '1' ...
    111.                 'attributes' ...
    112.                     'data' => "type: 'file'"
    113.                     'class' => "last leaf"
    114.                     'id' => "sa-4"
    115.                     'undefined' => "undefined"
    116.                     'getNamedItem' => "undefined"
    117.                     'setNamedItem' => "undefined"
    118.                     'removeNamedItem' => "undefined"
    119.                     'item' => "undefined"
    120.                     'getNamedItemNS' => "undefined"
    121.                     'setNamedItemNS' => "undefined"
    122.                     'removeNamedItemNS' => "undefined"
    123.                 'data' => "sub-atr-4"
    124.                 'icons' => "url(img/g.png)"
    125.     '4' ...
    126.         'attributes' ...
    127.             'data' => "type: 'file'"
    128.             'class' => "last leaf"
    129.             'id' => "a-3"
    130.             'undefined' => "undefined"
    131.             'getNamedItem' => "undefined"
    132.             'setNamedItem' => "undefined"
    133.             'removeNamedItem' => "undefined"
    134.             'item' => "undefined"
    135.             'getNamedItemNS' => "undefined"
    136.             'setNamedItemNS' => "undefined"
    137.             'removeNamedItemNS' => "undefined"
    138.         'data' => "atr-3"
    139.         'icons' => "url(img/g.png)"
    нужно из этого оставить только все значения attributes.id и data

    то есть должно остаться что-то типа:
    Код (Text):
    1.     '0' ...
    2.         'attributes' ...
    3.             'id' => "a-1"
    4.         'data' => "atr-1"
    5.     '1' ...
    6.         'attributes' ...
    7.             'id' => "a-2"
    8.         'data' => "atr-2"
    9.     '2' ...
    10.         'attributes' ...
    11.             'id' => "g-1"
    12.         'data' => "group-1"
    13.         'children' ...
    14.             '0' ...
    15.                 'attributes' ...
    16.                     'id' => "sa-1"
    17.                 'data' => "sub-atr-1"
    18.             '1' ...
    19.                 'attributes' ...
    20.                     'id' => "sa-2"
    21.                 'data' => "sub-atr-2"
    22.     '3' ...
    23.         'attributes' ...
    24.             'id' => "g-2"
    25.         'data' => "group-2"
    26.         'children' ...
    27.             '0' ...
    28.                 'attributes' ...
    29.                     'id' => "sa-3"
    30.                 'data' => "sub-atr-3"
    31.             '1' ...
    32.                 'attributes' ...
    33.                     'id' => "sa-4"
    34.                 'data' => "sub-atr-4"
    35.     '4' ...
    36.         'attributes' ...
    37.             'id' => "a-3"
    38.         'data' => "atr-3"
    глубина вложений
    элемент
    |-элемент
    не более. Тут наверняка функция строчек на 10, но как ее писать не знаю. Помогите пожалуйста.

    примерный код, но это будет просто строка.
    function print_r(obj) {
    var txt = "";
    for(var i=0;i<99;i++) {
    if(obj.children) {
    txt += obj.children.attributes.id + obj.children.data + + "\n";
    if(obj.children.children)
    txt += print_r(obj.children);
    }
    }
    return txt;
    }
    alert(print_r(obj));
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    eval(JSONstring) превращает строку в объект .Есть специальная функция в JS для работы с этим форматом, просто точно не помню, как она пишется.
    Далее циклами выводятся ненужные параметры. Что почитать:
    https://developer.mozilla.org/en/Core_J ... rray/slice
    https://developer.mozilla.org/En/Core_J ... ray/Splice
    http://javascript.ru/tutorial/object/in ... ie-svoistv
    https://developer.mozilla.org/en/Core_J ... ray_Object
     
  3. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    а я подумал - а мне строку-то передать легче будет. А потом я ее обработаю болгаркой регуляркой.
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    JSON - это и есть строка для передачи. Но в нужный момент её можно превратить в объект.
     
  5. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    че-то не получалось у меня при помощи jQuery ее передать без использованияя громоздкого json2.js