Büyük JSON dosyasını ayrıştırmak ve php kullanarak veritabanına eklemek için en iyi yolu nedir?

5 Cevap php

Ben bu büyük JSON dosyası var. Şu anda ben onu kullanıyorum yoludur:

  1. Bir dizeye tüm içeriğini okumak
  2. Json_decode yapmak, dizi olsun
  3. Bir zamanda ve benim SQL insert ifadesi oluşturmak dizi tek bir kayıt döngü

Sorun kodu çirkin olduğunu. Ayrıca, bu diziler bazı nesnelerin kendilerini diziler vardır, ve tüm kayıtları tüm değerleri içerir. Belirli bir değer mevcut olup olmadığını kontrol, ya da genel olarak, doğru çalıştığını vb varsayılan değer kullanmak için isset kullanmak zorunda, ancak kod çirkin. Ben daha iyi yazabilirsiniz herhangi bir yolu var mı?

5 Cevap

If you dont want to write ugly code to generate sql queries consider using an ORM Propel and doctrine are the ones i have personally used.

doktrin bir diziden bir nesne oluşturur ve sonra sadece onun üzerinde bir tasarruf yöntemi çağırmak için bir yöntemi vardır.

have a look at this http://www.doctrine-project.org/documentation/manual/1_0/en/working-with-models:arrays-and-objects:from-array

Sabit kod bakmadan tavsiye, ama ben olmayan yıkıcı iki diziyi birleştirir diziler için PHP + operatörü, size hatırlatmak isterim.

$default_values = array('Name' => '', 'Email' => '', 'Meta' => '');
$data = array('Name' => 'John'); // Only name set
$fixed_data = $data + $default_values;

$fixed_data Şimdi birden isset () kontroller için bir ihtiyaç olmadan array('Name' => 'John', 'Email' => '', 'Meta' => ''); gibi görünüyor. (Daha fazla bilgi olmadan söylemek zor, senin durumda geçerli olmayabilir.)

Güzellik bakanın gözündedir bulunmaktadır.

JSON formatı sizin kontrolünüz dışında ise adet tahtanın etrafında shuffle dışında yapabileceğiniz pek bir şey yok. Kodu yerine tek bir büyük blok sahip senin fonksiyonları olarak küçük ve mümkün olduğunca düzgün yapma olağan bir şey yapmak. Çoklu fonksiyon okumak daha kolay ve daha yeniden olacaktır.

Ben bu süreci functional decomposition aramak eğilimindedir.

(O OO titiz geceleri daha iyi uyku yapar hariç) Tabii ki de bir OO yaklaşım ve veritabanına kendilerini kurtarmak ve JSON nesne parçalarından kendilerini inşa ancak bu temelde aynı şeydir bazı güzel nesneler kurabilirsiniz.

Çoğu veritabanı (MySQL, sqlite vb) import/export data için XML veri formatı ile çalışmayı tercih.

XML içine JSON nesnesi dönüştürmek ve daha sonra bu işe yarayabilir.

Ben yakın gelecekte JSON destek veritabanlarını görmek için sürpriz değilim, ama şimdi bu muhtemelen yapmak için en iyi şeydir.

Eğer ADODb gibi güzel bir veritabanı soyutlama kullanırsanız, o zaman artık ekleme sorgusu oluşturmak için net ihtiyaç olacak.

Bu kullanarak ekin örneği ADODb,

$data['col1'] = 'value1';
$data['col2'] = 'value2';
$data['col3'] = 'value3';

$result = $adodb->AutoExecute($tablename, $data, 'INSERT');

Sonucu beri json_encode Zaten bir array, mükemmel uyum. Veritabanındaki sütun tanım izin verirseniz null, ardından $data hala geçerli bir ekleme olacak eksik bir sütun.