JSON'dan XML'e
JSON'u XML biçimine dönüştür
JSON Girdisi
XML Çıktısı
JSON'dan XML'e Dönüşüm Nedir?
JSON (JavaScript Object Notation) ve XML (eXtensible Markup Language), yazılım geliştirmede kullanılan iki baskın veri alışverişi formatıdır. JSON, anahtar-değer çiftleri ve dizileri kompakt bir söz dizimi içinde kullanırken XML, verileri açılış ve kapanış etiketlerinin içine alarak isteğe bağlı özniteliklerle zenginleştirir. JSON'dan XML'e dönüşüm; nesneler, diziler, dizgeler, sayılar, boolean'lar ve null gibi JSON'un yapısal ilkellerini, eleman iç içe geçmesi korunan biçimlendirilmiş bir XML belgesine çevirir.
XML, birçok kurumsal sistem, devlet API'si, SOAP web servisi ve HL7 (sağlık), FpML (finans) ile XBRL (finansal raporlama) gibi endüstri standartlarında hâlâ zorunlu formattır. Uygulamanız JSON üretirken aşağı akıştaki tüketici XML bekliyorsa, bir JSON'dan XML'e dönüştürücü bu çeviriyi elle yeniden yapılandırmaya gerek kalmadan gerçekleştirir. Dönüşüm öngörülebilir eşleme kurallarına göre işler: JSON nesneleri XML elemanlarına, dizi öğeleri tekrarlanan kardeş elemanlara ve ilkel değerler metin düğümlerine dönüşür.
JSON'un XML'e nasıl eşleneceğini tanımlayan tek bir RFC veya W3C standardı yoktur. Farklı kütüphaneler aynı girdi için farklı çıktılar üretebilir. Bu araç tarafından kullanılan en yaygın kural (ve pek çok popüler kütüphane tarafından da benimsenmiş olan); belgenin tamamını yapılandırılabilir bir kök eleman içine almak, her JSON anahtarını bir XML alt elemanına dönüştürmek ve dizi öğelerini aynı etiket adıyla tekrarlanan elemanlar olarak göstermektir. Alıcı sistem belirli bir XML şemasını (XSD) zorunlu kılıyorsa bu eşleme kurallarını anlamak büyük önem taşır.
Neden Çevrimiçi JSON'dan XML'e Dönüştürücü Kullanılır?
JSON kaynağından XML'i elle yazmak hem yorucu hem de hataya açıktır. Eşleşmeyen etiketler, unutulan kapanış elemanları ve yanlış iç içe geçme, şema doğrulamasından geçemeyen belgeler üretir. Dönüştürücü, yapısal çeviriyi otomatik olarak gerçekleştirir.
JSON'dan XML'e Kullanım Senaryoları
JSON'dan XML'e Eşleme Kuralları
JSON'dan XML'e dönüşümü yöneten evrensel bir standart olmadığından farklı araçlar farklı çıktılar üretir. Aşağıdaki tablo, bu dönüştürücü ve en popüler kütüphaneler (js2xmlparser, xmlbuilder, fast-xml-parser) tarafından kullanılan eşleme kurallarını göstermektedir. Diziler için tekrarlanan kardeş eleman kuralı baskın hale gelmiştir; çünkü XML şemalarının koleksiyonları doğal olarak modelleme biçimini yansıtır — her öğe, sarmalanmış bir alt eleman yerine birinci sınıf bir eleman olarak yer alır — ve XPath sorguları ile XSLT dönüşümleriyle temiz bir şekilde bütünleşir.
| JSON Type | JSON Example | XML Output |
|---|---|---|
| Object | {"name": "Alice"} | <name>Alice</name> |
| Nested object | {"user": {"age": 30}} | <user><age>30</age></user> |
| Array | {"colors": ["red", "blue"]} | <colors>red</colors><colors>blue</colors> |
| String | "hello" | <root>hello</root> |
| Number | 42 | <root>42</root> |
| Boolean | true | <root>true</root> |
| Null | null | <root/> |
| Empty object | {} | <root/> |
| Empty array | [] | (no child elements) |
Kod Örnekleri
Aşağıda üç farklı ortamda JSON'u XML'e dönüştürmek için çalıştırılabilir kod parçacıkları bulunmaktadır. Her örnek, örnek bir JSON nesnesinden biçimlendirilmiş XML üretir.
import { create } from 'xmlbuilder2';
const json = {
order: {
id: 1024,
items: [
{ sku: "A1", qty: 2 },
{ sku: "B3", qty: 1 }
],
shipped: false
}
};
const xml = create({ version: '1.0' })
.ele(json)
.end({ prettyPrint: true });
console.log(xml);
// → <?xml version="1.0"?>
// → <order>
// → <id>1024</id>
// → <items>
// → <sku>A1</sku>
// → <qty>2</qty>
// → </items>
// → <items>
// → <sku>B3</sku>
// → <qty>1</qty>
// → </items>
// → <shipped>false</shipped>
// → </order>import json
import xmltodict
data = {
"order": {
"id": 1024,
"items": [
{"sku": "A1", "qty": 2},
{"sku": "B3", "qty": 1}
],
"shipped": False
}
}
# xmltodict.unparse expects a single root key
xml = xmltodict.unparse(data, pretty=True)
print(xml)
# → <?xml version="1.0" encoding="utf-8"?>
# → <order>
# → <id>1024</id>
# → <items>
# → <sku>A1</sku>
# → <qty>2</qty>
# → </items>
# → <items>
# → <sku>B3</sku>
# → <qty>1</qty>
# → </items>
# → <shipped>false</shipped>
# → </order>package main
import (
"encoding/json"
"encoding/xml"
"fmt"
)
type Item struct {
SKU string `json:"sku" xml:"sku"`
Qty int `json:"qty" xml:"qty"`
}
type Order struct {
XMLName xml.Name `xml:"order"`
ID int `json:"id" xml:"id"`
Items []Item `json:"items" xml:"items"`
Shipped bool `json:"shipped" xml:"shipped"`
}
func main() {
raw := `{"id":1024,"items":[{"sku":"A1","qty":2},{"sku":"B3","qty":1}],"shipped":false}`
var order Order
json.Unmarshal([]byte(raw), &order)
out, _ := xml.MarshalIndent(order, "", " ")
fmt.Println(xml.Header + string(out))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <order>
// → <id>1024</id>
// → <items>
// → <sku>A1</sku>
// → <qty>2</qty>
// → </items>
// → ...
}