Merhaba sevgili dostlar, bu yazımda sizlere güzel bir paketten bahsetmek istiyorum.
Paketimizin adı Camaro, peki ne işe yarıyor bu paket? Camaro XML’i JSON objesine çevirmemizi sağlıyor. Çevirirken de, tüm XML’i değil, sadece istediklerimizi JSON objesinin içerisine koyuyor. Çok uzatmadan hemen bir örnek ile nasıl çalıştığına dair bir ipucu vereyim.
Örnek olarak aşağıdaki gibi bir XMLimiz olsun.
<userlist>
<user>
<name>caner canbaz</name>
<age>27</age>
<yearOfBirth>1994</yearOfBirth>
<isWorking>true</isWorking>
</user>
</userlist>
XML tanımını JSON objesine çevirmek için öncelikle bir template yani bir kalıp oluşturuyoruz. Hangi alanlar, hangi isimlerle dönüştürülsün, tipi numara mı true/false mu olsun gibi. Yukarıdaki XML tanımı için bir template oluşturalım.
const template = [
"userlist/user",
{
name: "title-case(name)",
age: "number(age)",
yearOfBirth: "number(yearOfBirth)",
isWorking: 'boolean(isWorking = "true")',
},
];
- Cevabımızın array of objects olmasını istiyoruz yani bir arrayin içinde etiketindeki alanların olduğu objeler olacak. O yüzden arrayin ilk elemanını bu tanım için ayırıyoruz (‘userlist/user’).
- Arrayin 2. elemanında ise bu user etiketindeki hangi alanları hangi veri tiplerinde istediğimizi tanımlıyoruz. Burada isterseniz hangi tanımların kabul edildiğini listeleyelim:
- String veri tipi için şunları kullanabiliriz: lower-case, upper-case, title-case, camel-case, snake-case, string-join, raw, Örn: title-case(name)
- Number için number, Örn: number(age)
- Boolean için boolean, Örn: boolean(isWorking = “true”)
Kalıbımızı oluşturduktan sonra ise, hem XML tanımımızı hem de kalıbımızı camaro’ya veriyoruz ve dönüştürme işlemini bekliyoruz.
const result = await camaro.transform(xml, template);
Sonucumuz şu şekilde geliyor:
XML Tanımı
Oluşturulan JSON Objesi
Tabii biz burada sadece 1 senaryo (array of objects) dönüştürmesi üzerine çalıştık, daha farklı senaryolar ve template tanımları için Camaronun Github sayfasını ve örneklerini inceleyebilirsiniz.
Kaynak kodun tamamı aşağıdadır. Umarım faydalı bir yazı olmuştur. Herkese iyi seneler!
Not: Eğer worker_threads ile ilgili bir hata alırsanız, Node.js versiyonundan kaynaklanıyordur. Node.js 12 veya daha üzeri bir sürüm kullanmanız gerekiyor. Bende Node.js 10 yüklü olduğu için 5.0.3 versiyonu ile bu yazıyı yazdım.