2009-07-23 22 views
15

Yüreğim, bir biçimi başka bir dosyaya yerleştirmenin yanlış olduğunu ancak somut nedenlerle ortaya çıkamayacağımı söylüyor. karşıneden JSON XML gömme kötü?

<root> 
<stuff> 
    thing 
</stuff> 
<more> 
    <[!CDATA[{"a":["b","c"]}]]> 
</more> 
</root> 

sadece iki bölüm mantıksal olarak farklı kod tarafından çözümlenen olacak

<root> 
<stuff> 
    thing 
</stuff> 
<more> 
    <a> 
    b 
    </a> 
    <a> 
    c 
    </a> 
</more> 
</root> 

xml koyarak, ama bir takas formatı olarak, bu karıştırın ve maç sözdizimi için ok?

JSON yanıtını çözümleyen mevcut bir son noktamız varsa, cevabınız değişiyor mu? XML tükenmesi için bu son noktayı tekrar gözden geçirmeliyiz.

+5

Neden sqlite dosyalarını veritabanlarında lekeler olarak saklıyorsunuz? –

cevap

21

İki biçim kullanarak bir değişim biçimi olarak, sizinle birlikte çalışmak isteyen kişilere fazladan yük koyar. Artık bir XML ayrıştırıcısına ve bir JSON ayrıştırıcısına sahip olmaları gerekiyor.

Ayrıca, dosyanızın farklı bölümlerini düşünürken, zihninizi zihinsel olarak değiştirmek zorunda kaldıkları için, insanların biçimlendirmesini de zorlaştırır.

Son olarak, yapının tamamına tek seferde bakan şeyleri kolayca yapamazsınız. Örneğin, JSON bitlerini kapmak için XPath'i kullanamazsınız, ayrıca tüm cevabı bir JavaScript nesnesi olarak değerlendiremezsiniz. İki formatı karıştırarak, verileri manipüle etmede "her iki dünyanın da en kötü" problemini alırsınız.

+1

JSON yanıtını çözümleyen mevcut bir son noktamız varsa cevabınız değişiyor mu? XML tükenmesi için bu son noktayı tekrar gözden geçirmeliyiz. –

+0

Zaten bir çözümünüz olduğundan - yani; Bir XML ayrıştırıcısının üstündeki bir JSON ayrıştırıcısı - daha sonra sorunuzun cevapları, taşınabilirlik, okunabilirlik, sürdürülebilirlik ve sade eski moda tadıyla ilgili olacaktır. Tabii ki * şimdi * çalışıyor, ama gelecekte kimin okuyabileceğini, kimden XML'i geçebileceğinizi, sonunda niçin bir JSON çözümleyicisine ihtiyaç duyduklarını açıklayacağınızı düşünün. Daha ziyade, daha çok işin daha sonra oluşturulmasına yol açabilecek bir işe yarayacak gibi görünüyor. – shuckster

+1

@Paul: Mevcut uygulamanız için çalışıyorsa, şu anda değiştirmek için bir neden yok. Bununla birlikte, yaratıcılık (okuma: kokmuş) ile başlamak başlarsa, Laurence'in bir ya da diğeriyle uğraşmak istediğinizde anlattığı sorunları çözmenin bir yolu. –

7

Veritabanı normalleştirme tartışması gibi bir sorta. Saf XML'de (ya da veritabanı şemanızı normalleştirerek) her şeyi yapmak için daha temiz ve daha zariftir, bu şekilde özel uygulamanıza gereksiz şekilde bağlı değilsiniz. Ancak, daha sonra XML'i JavaScript nesnelerine dönüştürmeniz gerekiyorsa (veya her SELECT için 5 tabloya katılıyorsanız) çok fazla kod yazarak gereksiz performans isabetlerine neden olabilirsiniz.

Her şey, kolaylık ile formel doğruluk arasında nasıl denge kurduğunuza bağlıdır. Bu, W3C tarafından standartlaştırılacak ve milyonlarca kullanılan sevgili Tanrı tarafından kullanılabilecek bir XML değişim formatıysa, JSON kullanmayın. Bu sadece bir kod tarafından işlenecek bir şirket içi uygulama için ise, o zaman kendiniz yazdınız ve vidalayın, sadece JSON'u buraya atın ve devam edin!

+5

+1. iyi uygulamalar iyidir. ama iyi düşüncenin yerine geçemezler. Bazen kalıpları bir problem için en iyi çözüm değildir. Bazen bir hack doğru şeydir. Yaptığınız herşeyi, NEDEN yaptığınızı ve ne kadar dağınık olduğunu, belgelemeniz gerekip gerekmediğini ve bir yerdeki dağınıklığı gizlemeniz gerektiğini biliyorsunuz. – back2dos

3

Bence XML tercih edilen Veri aktarımı temsilidir, ancak JSON, Haritalar ve Diziler söz konusu olduğunda çok daha etkileyici. Bir listeyi veya haritayı temsil etmek için JSON'u xml'ye gömmekle ilgili bir sorunum olmaz.