Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разбор json-строки на стороне клиента (двумерный массив) (https://javascript.ru/forum/misc/19062-razbor-json-stroki-na-storone-klienta-dvumernyjj-massiv.html)

Триви 25.07.2011 01:58

Разбор json-строки на стороне клиента (двумерный массив)
 
1) У хостера PHP4 :-E (не бросайтесь тапками)
2) Прожект в windows-1251 :-E (не швыряйте последние)
Нарыл в инете функцию array2json(); (спасибо доброму человеку)
С одномерными массивами, проблем нет,
однако многомерные передает следующим образом:
{
"0":{"id":351,"post":"Привет"},
"1":{"id":352,"post":"Как дела?"}
}
Чем разобрать такого вида запись???

ЗЫ: эти json-парсеры не канают! :-/

ваый 25.07.2011 11:48

Парсер Крокфорда не работает? Звучит очень сомнительно. Потому как даже простой eval для приведенной вами строки прекрасно справляется:
eval('(' + jsonString + ')')

kobezzza 25.07.2011 11:55

https://raw.github.com/douglascrockf...aster/json2.js

Либо Крокфорда, которая может как парсить JSON в JS, так и преобразовывать JS в JSON. Там также учитывается, что современные браузеры умеют это делать нативно.

ЗЫ: если у вас не пашет, то значит ошибка у вас)

B@rmaley.e><e 25.07.2011 12:04

Возьмите нормальную библиотеку для работы с JSON в php.

dmitriymar 25.07.2011 12:10

Цитата:

Сообщение от Триви
Разбор json-строки на стороне клиента (двумерный массив)
1) У хостера PHP4 (не бросайтесь тапками)
2) Прожект в windows-1251 (не швыряйте последние)
Нарыл в инете функцию array2json(); (спасибо доброму человеку)
С одномерными массивами, проблем нет,
однако многомерные передает следующим образом:{
"0":{"id":351,"post":"Привет"},
"1":{"id":352,"post":"Как дела?"}
}


ну и зачем это всё написано если нужно на клиенте разобрать?

JSON.parse()-стандартная функция скрипта для разбора. ну дальше просто определить что значение а что массив если заранее не известно

Триви 25.07.2011 13:54

Спасибо за ответы.. :thanks:
Видать я разбираю как то не так?
Разбор делаю следующим образом:
function iterate(data){
    if (data instanceof Array) {
      for (var i in data) {
        iterate(data[i]);
      }
    } else {
       document.write(data['id'] + ' -> ' + data['post'] + '</BR>');
    }
  }


Не пойму где косяк?!! :-E

B@rmaley.e><e 25.07.2011 14:10

Массивы так не перебирают.

И это:
Цитата:

{
 "0":{"id":351,"post":"Привет"},
 "1":{"id":352,"post":"Как дела?"}
 }

не массив.

dmitriymar 25.07.2011 14:39

сначала JSON.parse()
а потом определять что массив а что нет ,и то при условии что структура не известна заранее.а так ,если каждый элемент яссон после распарсинья массив с чёткой структурой,зачем извращение? кол-во массивов узнать легко. кол-во и последовательность элементов в массиве известно- зачем чтото изобретать если достаточно мануал по функции прочитать?

Триви 25.07.2011 15:33

Естественно я парсю сначала..
Общий смысл такой:

if (data) {

        var block_arr = JSON.parse(data);

        for (i = 0; i < block_arr.length; i++) {

             var block += topic_block(block_arr[i].id, block_arr[i].post, block_arr[i].name, block_arr[i].date_string);


        }

        $('#outer').scrollTop($('#topic').append(block).height());
}


При попытке вывести alert(block_arr.length) - андефайнд!!!
Я новичок в этих вопросах, подскажите в чем тут дело? :blink:
Помогите, PLZ, разобраться!

dmitriymar 25.07.2011 15:50

1 стоит посмотреть на то действительно ли это ясон -а то может быть по виду один в один практически,а не ясон. (в фаербаге-посмотреть на ответ-ясон он или нет)


Часовой пояс GMT +3, время: 12:23.