2014-01-11 4 views
2

У меня есть большой файл JSON, который я пытаюсь вставить в базу данных. При использовании json_decode, чтобы преобразовать его в массив, чтобы вставить его в базу данных, я получаю сообщение об ошибке:Работа с большим .JSON файлом (PHP)

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 188340087 bytes) in site.php on line 48 

Есть ли более эффективный способ, чтобы перевести эти данные без строки читать строки и буферизации. Если нет, как я должен читать каждую строку и расшифровывать ее? Буду признателен за любую помощь.

{"items":[ { 
    "itemId" : 17730521, 
    "parentItemId" : 17730521, 
    "name" : "1000 lb Flat-Free Super Steel P-Handle Hand Truck", 
    "msrp" : 110.0, 
    "salePrice" : 87.94, 
    "upc" : "053417031815", 
    "categoryPath" : "Home Improvement/Tools/Lifting Equipment", 
    "shortDescription" : "The Flat-Free 1000-pound Heavy-Duty Hand Truck is one tough truck with its heavy-duty oversized frame, extra large base plate and curved frame back that easily transports boxes or cylinders.", 
    "longDescription" : "<br><b>1000 lb Flat-Free Super Steel P-Handle Hand Truck:</b><ul><li>Heavy-duty flat-free 10" solid rubber wheels</li><li>1000 lb capacity</li><li>Extra large 20" x 8" base plate for bulky and oversized loads</li><li>50" height for larger loads</li><li>P-loop handle for easy 1- or 2-hand control</li><li>Large fenders to protect load from damage</li><li>Dimensions: 50"L x 21"W x 19"H</li><li>1-year warranty</li></ul>", 
    "brandName" : "Generic", 
    "thumbnailImage" : "this is a link", 
    "mediumImage" : "this is a link", 
    "largeImage" : "this is a link", 
    "productTrackingUrl" : "", 
    "ninetySevenCentShipping" : false, 
    "standardShipRate" : 0.0, 
    "twoThreeDayShippingRate" : 79.97, 
    "overnightShippingRate" : 73.97, 
    "marketplace" : false, 
    "shipToStore" : true, 
    "freeShipToStore" : true, 
    "modelNumber" : "H5986", 
    "productUrl" : "", 
    "categoryNode" : "1072864_1031899_1043985", 
    "bundle" : false, 
    "clearance" : true, 
    "preOrder" : false, 
    "stock" : "Available", 
    "availableOnline" : true, 
    "bestMarketplacePrice" : { 
    "price" : 120.0, 
    "sellerInfo" : "PlumStruck", 
    "standardShipRate" : 5.99, 
    "availableOnline" : true, 
    "clearance" : false 
    } 
}, 
... 
]} 
+0

получил больше памяти, вы может выделить? –

+0

Я попытался выделить память, к сожалению, при загрузке файла он использует слишком много ресурсов моего сервера. Я стараюсь сделать его легким и эффективным, чтобы не мешать памяти. – user3184243

+0

Какая структура этого массива JSON? В чем проблема с чтением строк по очереди. Если это всего лишь массив и лучше, но в основном с разделителями строк, это очень просто. – Brad

ответ

0

Был прекрасный человек, который написал эту LIB для разбора большого JSON https://github.com/kuma-giyomu/JSONParser

Как автор говорит:

Как:

Прочитайте файл теста/test.php для реальный пример. Но в основном:

создать экземпляр парсера

установить обработчик для событий вы заинтересованы в

запустить метод parseDocument

ожидания н см

Смежные вопросы