[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: JSON большой файл
sx000
Есть файл ооочень большой 80 мегов, там много { }{ }{ }. json_encode боюсь его весть заталкивать... как правильно работать с форматом JSON если файл большой очень? Да и там оно идет одной строкой большой ...



Спустя 1 день, 15 часов, 55 минут, 42 секунды (26.11.2011 - 14:52) sx000 написал(а):
помогите пожалуйста не как не могу придумать как прочитать одну огромную строку ... и еще формат же JSON нарушится

Спустя 17 минут, 28 секунд (26.11.2011 - 15:09) zeromind написал(а):
ну ты пробывал json_encode ? что на клиент приходит?
вообще не понятно, ты с сервера на клиент хочешь отправить? или наооборот?

если с сервера на клиент, то данные в { : } не долны быть, json_encode - сам сериализует данные к типу JSON и на клиенте уже всё будет готово как надо.. ток спарсить надо будет данные..

Спустя 45 минут, 45 секунд (26.11.2011 - 15:55) sx000 написал(а):
Может я пояснил не так, еще раз попробую.

$obj=json_decode(file_get_contents('file.json'), true);

file.json - весит 80 мегабайт.
ответ сервера
Fatal error: Allowed memory size of 134217728 bytes exhausted
Так вот внутри file.json все одной строкой я уме на приложу как работать с данными от туда

Спустя 1 минута, 27 секунд (26.11.2011 - 15:56) Invis1ble написал(а):
да наверное никак, хранить данные в меньших объемах. Либо увеличить объем памяти, выделяемой интерпретатору.

Спустя 1 минута, 20 секунд (26.11.2011 - 15:58) sx000 написал(а):
ну мне отдают в таком формате данные я их привожу в должный вид уже, но я не как не могу отдает стороне приказать изменить формат smile.gif по этому проблема актуальная

Спустя 1 минута, 53 секунды (26.11.2011 - 16:00) zeromind написал(а):
вообще с большими объемами данных надо работать с XML'ом..
я первый раз вижу такой обьем данных на JSON
теперь хз что делать, попробуй поделить этот файл на 2 равных ?

Спустя 1 минута, 57 секунд (26.11.2011 - 16:02) sx000 написал(а):
дело в том что у меня текстовый редактор еле ворочает его там одна строка и это просто пипец полный. Может как то побайтово считывать ... парность проверять ...

Спустя 1 минута, 8 секунд (26.11.2011 - 16:03) zeromind написал(а):
вообщем забей на эту тему))
на JSON с такими обьемами данных не работают (на сколько я знаю)

Спустя 22 минуты, 6 секунд (26.11.2011 - 16:25) vital написал(а):
Недавно тоже была такая проблема.
Вобщем, на 50мб джсона, надо 1.5гб памяти для енкода.

В php.ini директива memory_limit вам в помощь.

А вообще да, нельзя так делать. Джсон не предназначен для передачи больших данных.

Спустя 1 минута, 29 секунд (26.11.2011 - 16:26) Invis1ble написал(а):
vital
Цитата
Вобщем, на 50мб джсона, надо 1.5гб памяти для енкода.

1.5 гб ? ты не ошибся, случайно?

Спустя 3 минуты, 13 секунд (26.11.2011 - 16:30) vital написал(а):
Цитата (Invis1ble @ 26.11.2011 - 15:26)
vital
Цитата
Вобщем, на 50мб джсона, надо 1.5гб памяти для енкода.

1.5 гб ? ты не ошибся, случайно?

Неа. Проверь wink.gif
У нас сначала падала нода на JSON.parse() с нехваткой памяти, у которой по дефолту выделен гиг памяти.

ПОпробовали на пхп - постепенно увеличивая память. 50мб джсона=1.5гб оперативы.
Буду на работе, могу выложить файлик с джсоном, проверьте сами.

Спустя 1 минута, 9 секунд (26.11.2011 - 16:31) Invis1ble написал(а):
Жесть... Да щас времени нет на эксперименты пока что, поверю на слово smile.gif Спасибо за инфу.

Спустя 14 секунд (26.11.2011 - 16:31) sx000 написал(а):
да меня админы разапнут нафиг smile.gif дома тока если поставить все

Спустя 48 секунд (26.11.2011 - 16:32) sx000 написал(а):
может кто то скрипт сможет запустить дома? smile.gif а то у меня не чего не стоит на домашнем железе вообще ...

Спустя 28 секунд (26.11.2011 - 16:32) Invis1ble написал(а):
sx000
ну так дома распили файл на несколько частей и сохрани. А на работе (или где там) работай с кусками.

Спустя 1 минута, 19 секунд (26.11.2011 - 16:34) sx000 написал(а):
да не могу распилить у меня редактор вснент нафиг, 1 строка 70 метров этож смерть даже для VI

Спустя 51 секунда (26.11.2011 - 16:34) Invis1ble написал(а):
причем тут редактор, скриптом распили biggrin.gif

Спустя 46 секунд (26.11.2011 - 16:35) vital написал(а):
А самое приколькное, что его не так и просто распилить, что бы потом обе части остались валидные - что бы можно было их енкоде-декоде.

Совет - просто сконвертите ваш джсон в хмл. И работайте уже с хмл. Масса готовых конвертилок есть в инете.

Спустя 9 минут, 3 секунды (26.11.2011 - 16:44) Invis1ble написал(а):
vital
Цитата
А самое приколькное, что его не так и просто распилить, что бы потом обе части остались валидные - что бы можно было их енкоде-декоде.

хз, вот на скорую руку набросал пример:
$data = array('k1' => 'v1', 'k2' => array('v2.1', 'v2.2'), 'k3' => 'val3');

$array = json_encode($data);
$data2 = json_decode($array, true);
var_dump(array_slice($data2, 1, 1));


все работает вроде норм.
Разбиваем на куски, проходим по ним json_encode и сохраняем в файлы каждый кусок.

ПС. У array_slice() есть еще 4-й параметр - сохранять ключи, на всякий случай можно установить в true, хотя он вроде и так в нем стоит.

ППС. sx000, я бы помог тебе разбить его, но у меня ноут, на нем всего 1.3 ГБ оперативы

Спустя 4 часа, 5 минут, 10 секунд (26.11.2011 - 20:49) sx000 написал(а):
Цитата (vital @ 26.11.2011 - 13:35)
А самое приколькное, что его не так и просто распилить, что бы потом обе части остались валидные - что бы можно было их енкоде-декоде.

Совет - просто сконвертите ваш джсон в хмл. И работайте уже с хмл. Масса готовых конвертилок есть в инете.

да да вот я подумал в xml сконвертить

Спустя 17 минут, 39 секунд (26.11.2011 - 21:07) Семён написал(а):
Лучше скажи что тебе нужно с этим файлом сделать дальше?
Самописный парсинг файла никто не отменял.

Спустя 1 час, 11 минут, 24 секунды (26.11.2011 - 22:18) Nikitian написал(а):
как вариант, найти повторющиеся элементы, отдать это всё добро на клиента и на js распарсить. Аяксом частями сливать на сервер. Клиент посвопит, но разжуёт в итоге, особенно если какой-нибудь хром, который с яваскриптом нормально дружит.

Спустя 15 часов, 16 минут, 18 секунд (27.11.2011 - 13:35) sx000 написал(а):
Цитата (Семён @ 26.11.2011 - 18:07)
Лучше скажи что тебе нужно с этим файлом сделать дальше?
Самописный парсинг файла никто не отменял.

мне нужно его перековеркивать под свой построчный формат.
{} строка
{} строка
{} строка
ну формирую строку из данных взятых из {}. Вся проблема в том что я все написал надо вот тоько памяти по больше и все. У меня ноут 2 гига не хватит памяти на 70 метров

Спустя 1 час, 51 минута, 41 секунда (27.11.2011 - 15:26) SlavaFr написал(а):
надо просто писать декодер, который по такому же принципу как и xml- sax парсер работает и вставлять логику в старт , дата и кониц елемента, как это делается в пхп xml_set_element_handler.

в этом случае проблем с размерами файла не будет.

к стате опиши нам структуру json-стринга которую ты должен обработать, а так же что ты собираешся с этими датами делать.

Спустя 46 минут, 33 секунды (27.11.2011 - 16:13) sx000 написал(а):
структура у json одна и таже этож и есть формат данных что там поля то разглядывать, выше я писал что переделываю под свой формат строчный базу. Мне не надо для постояннки один раз надо конвертнуть ьазу и все. Проще чтоб кто то на форуме взял мой скрипт если есть возможно увеличил на дом машине до 2 гигов php и конвертнул и все. У меня нет такой возможности пока. Чем велосипед изобретать. Это самый разумный вариант по времени.

Спустя 1 час, 36 минут, 50 секунд (27.11.2011 - 17:50) I++ написал(а):
Не понятно какой функционал требуется, вообще при работе с большими файлами, если памяти не достаточно, нужно работу разбивать по кусочкам, и сбрасывать данные в выходной файл, после конца обработки отдавать файл без участия php клиенту, через например ngix.

Не?

P.S давай скрипт и файл )

Спустя 2 минуты, 15 секунд (27.11.2011 - 17:52) sx000 написал(а):
да надо, но ты как соберешь json то? Там одной строкой 70 метров база. ну взял ты 60кб текста а где гарантии что вогли туда парные скобки, а начало json файла? как сним быть. Это это офигенно "удобный" формат. Редактор его не берет даже.

Спустя 2 минуты, 24 секунды (27.11.2011 - 17:54) Invis1ble написал(а):
Цитата
где гарантии что вогли туда парные скобки

я вобще-то показал пример, как разбить файл. Ты не удосужился даже запустить его?

Спустя 1 час, 55 минут, 37 секунд (27.11.2011 - 19:50) sx000 написал(а):
да все взял на флешку закатал php и скрипт сходилк товарищу у него 8 гигов, 3 минуты здрасти как дела ... и готово smile.gif спасибо всем
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.