Skip to content

YAML'dan JSON'a Dönüştürücü

YAML yapıştırın, anında JSON alın. Tarayıcınızda canlı dönüştürme. K8s manifest'leri, OpenAPI spesifikasyonları ve Helm değerleri desteklenir. %100 gizli.

Takip Yok Tarayıcıda Çalışır Ücretsiz
Seçenekler · 2 boşluk
Girinti
0 karakter
JSON Çıktı
0 satır
YAML 1.2 spesifikasyon uyumluluğu, çapa/takma ad genişlemesi ve çok belgeli işleme doğruluğu için incelendi — Go Tools Engineering Team · May 4, 2026

JSON nedir?

JSON (JavaScript Object Notation), RFC 8259 ve ECMA-404 olarak standartlaştırılmış, hafif, metin tabanlı bir veri değişim formatıdır. Dizeler, sayılar, boolean değerler, null, diziler ve nesneler olmak üzere altı veri türünü destekler; katı, minimal sözdizimi neredeyse tüm programlama dilleri, API'ler ve araç zincirleri tarafından yerel olarak ayrıştırılabilir. YAML, insan tarafından yazılan yapılandırma dosyaları için (Kubernetes manifest'leri, GitHub Actions, Ansible playbook'ları, Helm değerleri) tercih edilen format olsa da JSON, API'ler, otomasyon betikleri ve programlı veri işleme için evrensel makine tarafından okunabilir formattır.

Dolayısıyla YAML'ı JSON'a dönüştürmek, DevOps ve backend geliştirmede en yaygın görevlerden biridir — YAML yapılandırma dosyanız var; ancak bir REST API'ye beslemek, jq ile sorgulamak veya JavaScript araçlarıyla işlemek için JSON'a ihtiyacınız var.

Bu araç, tipik online dönüştürücülere kıyasla dört önemli farka sahiptir:

**1. Çok Belgeli YAML İşleme.** YAML, --- (belge başlangıç işareti) ile ayrılmış tek bir akışta birden fazla belgeyi destekler. Pek çok gerçek dünya YAML dosyası — bazı Kubernetes manifest'leri ve Ansible playbook'ları dahil — birden fazla belge içerir. Bu araç, { version: '1.2', merge: true } seçenekleriyle eemeli/yaml kütüphanesinin parseAllDocuments işlevini kullanır ve ilk belgeyi JSON olarak döndürür. Tüm belgelere ihtiyacınız varsa --- üzerinden bölün ve her birini ayrı ayrı dönüştürün.

**2. Çapa ve Takma Ad Genişlemesi.** YAML çapaları (&name) ve takma adları (*name), veri bloklarının yeniden kullanımına olanak tanır — JSON'da karşılığı olmayan güçlü bir YAML özelliği. Bu araç, tüm çapaları ve takma adları (birleştirme anahtarları: <<: *anchor dahil) tamamen genişletir; böylece JSON çıktısı referanssız, eksiksiz veri içerir. JSON'da referans sözdizimi bulunmadığından bu her zaman doğru dönüşümdür. Genişleme, döngüsel referanslara karşı koruma dahil eemeli/yaml kütüphanesi tarafından güvenle işlenir. Ters yönde kullanım için JSON'dan YAML'a Dönüştürücü aracımıza bakın.

**3. Yorum Kaybı — Eğitici Şeffaflık.** YAML, Kubernetes manifest'lerinde, Helm değerlerinde ve Ansible playbook'larında niyet belgelemek için sıkça kullanılan # yorumlarını destekler. JSON'da yorum sözdizimi yoktur; bu nedenle yorumlar dönüştürme sırasında kalıcı olarak kaybolur. Bu bir hata değil — temel bir format farkıdır. Bu araç bunu açıkça belirtir. Açıklamaları korumak istiyorsanız, bunları JSON alanları olarak kodlayın (_comment anahtarları veya özel bir metadata nesnesi) veya YAML'ı yetkili kaynak olarak saklayın. Format farkları hakkında daha fazla bilgi için YAML Norway Sorunu ve JSON-YAML Farkları makalemize bakın.

**4. %100 Tarayıcı Tabanlı Gizlilik.** Kubernetes sırları, veritabanı kimlik bilgileri, parolalı Helm değerleri ve dahili servis yapılandırmaları içeren YAML verileriniz tarayıcınızdan asla ayrılmaz. Hiçbir veri sunucuya gönderilmez. Bunu tarayıcınızın Ağ sekmesinde doğrulayabilirsiniz. JSON'a dönüştürdükten sonra aşağı akış işlemlerinde kullanmadan önce JSON Biçimlendirici aracımızla sonucu doğrulayıp biçimlendirebilirsiniz.

YAML'ın zenginliği (yorumlar, çapalar, çok belgeli destek, blok skalerler), okunabilirlik ve belgelemenin önemli olduğu insan tarafından yazılan yapılandırma dosyaları için mükemmeldir. JSON'un katılığı ve evrenselliği, birincil tüketicinin makine olduğu durumlarda daha iyi bir tercih yapar. Bu dönüştürücü iki dünyayı birbirine bağlar: insan sürdürülebilirliği için yapılandırmanızı YAML'da tutun, makine tarafından okunabilir değişim formatına ihtiyaç duyduğunuzda JSON'a dönüştürün.

// Convert YAML to JSON in Node.js using the eemeli/yaml library
import { parseAllDocuments } from 'yaml';

const yamlString = `apiVersion: apps/v1
kind: Deployment`;

// parseAllDocuments handles multi-document YAML (--- separator)
// version: '1.2' ensures yes/no are strings, not booleans
// merge: true expands anchor/alias merge keys (<<: *anchor)
const docs = parseAllDocuments(yamlString, { version: '1.2', merge: true });

// Take the first document (skip additional --- blocks)
const json = JSON.stringify(docs[0].toJSON(), null, 2);

console.log(json);
// {
//   "apiVersion": "apps/v1",
//   "kind": "Deployment"
// }

Temel Özellikler

Canlı Dönüştürme

YAML yazarken veya yapıştırırken JSON çıktısı anında güncellenir — Dönüştür düğmesine gerek yok. Büyük girişler (>200KB) tarayıcının yanıt vermeye devam etmesi için otomatik olarak manuel moda geçer.

2 veya 4 Boşluk Girinti

JSON çıktısı için 2 boşluk ve 4 boşluk girinti arasında geçiş yapın. 2 boşluk, çoğu araç ve API için standarttır; 4 boşluk bazı stil kılavuzları ve düzenleyici varsayılanlarıyla uyumludur.

Çok Belgeli Destek

--- ile ayrılmış birden fazla belge içeren YAML akışlarını işler. İlk belge JSON'a dönüştürülüp döndürülür. Kubernetes çok kaynaklı dosyalar ve Ansible playbook'ları için kullanışlıdır.

Çapa ve Takma Ad Genişlemesi

YAML çapalarını (&name) ve takma adlarını (*name), birleştirme anahtarları (<<: *anchor) dahil tamamen genişletir. JSON çıktısı eksiksiz, referanssız veri içerir — JSON'da karşılığı bulunmadığından bu her zaman doğru davranıştır.

%100 Tarayıcı Tabanlı Gizlilik

Tüm dönüştürme, JavaScript kullanılarak tarayıcınızda yerel olarak çalışır. Sırlar, kimlik bilgileri ve üretim yapılandırmaları dahil YAML verileriniz hiçbir sunucuya gönderilmez, kayıt altına alınmaz ve saklanmaz.

K8s, Compose, Helm ve OpenAPI Dosyalarını Destekler

Gerçek dünya DevOps kullanım durumları için optimize edilmiştir: Kubernetes manifest'leri, Docker Compose yığınları, Helm chart değerleri, GitHub Actions iş akışları, OpenAPI spesifikasyonları ve Ansible playbook'ları — her biri için örnekler mevcuttur.

Örnekler

Kubernetes Manifest

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: production
  labels:
    app: my-app
    version: 1.0.0
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: my-app:1.0.0
          ports:
            - containerPort: 8080
          resources:
            requests:
              memory: 64Mi
              cpu: 250m
            limits:
              memory: 128Mi
              cpu: 500m

Kubernetes Deployment manifest'ini YAML'dan JSON'a dönüştürün — jq ile sorgulamak, Kubernetes API'sine göndermek veya Terraform ve CI/CD pipeline'larına beslemek için kullanışlıdır

Docker Compose

version: '3.9'
services:
  web:
    image: nginx:1.25-alpine
    ports:
      - '80:80'
      - '443:443'
    environment:
      NGINX_HOST: example.com
      NGINX_PORT: '80'
    depends_on:
      - db
    restart: unless-stopped
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata: {}

Docker Compose YAML'ını programlı işleme, otomasyon betiklerine besleme veya JavaScript araçlarıyla işlemek için JSON'a dönüştürün

GitHub Actions İş Akışı

name: CI
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: pnpm
      - name: Install dependencies
        run: pnpm install --frozen-lockfile
      - name: Run tests
        run: pnpm test

GitHub Actions iş akışı YAML'ını belirli alanları sorgulamak, yapıyı doğrulamak veya JSON kullanan API'lerle entegre etmek için JSON'a ayrıştırın

OpenAPI Spesifikasyonu

openapi: 3.0.3
info:
  title: User API
  version: 1.0.0
  description: Manage application users
paths:
  /users:
    get:
      summary: List users
      operationId: listUsers
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
  /users/{id}:
    get:
      summary: Get user
      operationId: getUser
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        email:
          type: string
          format: email

OpenAPI 3.0 spesifikasyonunu YAML'dan istemci kod üreteci, API test aracı veya programlı şema incelemesi için JSON'a dönüştürün

Helm values.yaml

replicaCount: 3
image:
  repository: my-app
  tag: 1.0.0
  pullPolicy: IfNotPresent
service:
  type: ClusterIP
  port: 80
ingress:
  enabled: true
  className: nginx
  hosts:
    - host: my-app.example.com
      paths:
        - path: /
          pathType: Prefix
resources:
  requests:
    memory: 64Mi
    cpu: 250m
  limits:
    memory: 128Mi
    cpu: 500m
autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80

Helm chart values.yaml dosyasını analiz, rapor oluşturma veya JSON yapılandırması bekleyen araçlara besleme için JSON'a dönüştürün

Ansible Playbook

- name: Configure web servers
  hosts: webservers
  become: true
  vars:
    http_port: 80
    max_clients: 200
  tasks:
    - name: Ensure nginx is installed
      ansible.builtin.package:
        name: nginx
        state: present
    - name: Start nginx service
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true
    - name: Copy nginx config
      ansible.builtin.template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: '0644'
      notify:
        - Restart nginx
  handlers:
    - name: Restart nginx
      ansible.builtin.service:
        name: nginx
        state: restarted

Ansible playbook YAML'ını görev yapısını incelemek, yapılandırmaları denetlemek veya raporlama pipeline'larıyla entegre etmek için JSON'a ayrıştırın

Nasıl Kullanılır

  1. 1

    YAML Verilerinizi Yapıştırın

    YAML verilerinizi yukarıdaki giriş alanına girin veya yapıştırın. Kubernetes Deployment, Docker Compose dosyası veya Helm values.yaml gibi bir örnek denemek için «Örnek yükle» düğmesine de tıklayabilirsiniz.

  2. 2

    Canlı JSON Çıktısını Görün

    JSON, çıktı panelinde anında görünür. Hedef aracınızın gereksinimlerini karşılamak için Seçenekleri (girinti 2 veya 4 boşluk) ayarlayın.

  3. 3

    Kopyalayın veya İndirin

    JSON'u panoya almak için Kopyala'ya veya jq, API çağrıları ya da herhangi bir aşağı akış aracı için hazır olan .json dosyası olarak kaydetmek için İndir'e tıklayın.

Yaygın YAML Tuzakları

Sekme Girintisi

YAML spesifikasyonu girinti için sekme karakterlerini yasaklar — yalnızca boşluklara izin verilir. YAML'ınız sekme kullanan bir düzenleyicide yazılmış veya oradan kopyalanmışsa ayrıştırıcı hata fırlatır. Tüm sekme girintisini boşlukla değiştirin (her seviye için 2 veya 4 boşluk).

✗ Yanlış
services:
	web:
		image: nginx:1.25-alpine
✓ Doğru
services:
  web:
    image: nginx:1.25-alpine

Tutarsız Girinti

YAML, iç içe yapıyı tanımlamak için tutarlı girinti kullanır. Aynı blok içinde farklı sayıda boşluk karıştırmak (örneğin bir seviyede 2 boşluk, başka bir seviyede 3 boşluk) ayrıştırma hatalarına yol açar. Belgede her seviye aynı sayıda boşlukla girilmelidir.

✗ Yanlış
metadata:
  name: my-app
   namespace: production
✓ Doğru
metadata:
  name: my-app
  namespace: production

Tırnak İçine Alınmamış Özel Karakterler

İki nokta (:), diyez (#), &, *, {, }, [, ], |, >, ! ve @ karakterleri YAML'da özel anlam taşır. Bunları değerlerde tırnaksız kullanmak ayrıştırma hatalarına veya beklenmedik davranışlara yol açabilir. Bu karakterleri içeren değerleri tek veya çift tırnak içine alın.

✗ Yanlış
url: http://example.com:8080/api
tag: #latest
✓ Doğru
url: 'http://example.com:8080/api'
tag: '#latest'

Çapa Döngüsel Referansları

YAML teknik olarak kendine referans veren çapalara izin verir (döngüsel referanslar), ancak pratikte nadirdir. Döngüsel bir çapa ayrıştırıcının sonsuz genişleme döngüsüne girmesine yol açar. eemeli/yaml kütüphanesi takılı kalmak yerine döngüsel çapalar için hata tespit edip fırlatır.

✗ Yanlış
# Circular anchor (rare but possible)
base: &base
  parent: *base
✓ Doğru
# Use explicit fields instead of circular references
base:
  parent: null

Çok Belgeli Karışıklık

Birden fazla --- ayırıcı içeren YAML dosyaları birden fazla belge içerir. Bu araç yalnızca ilk belgeyi JSON olarak döndürür. İkinci veya üçüncü --- sonrasındaki bir belgeden veri bekliyorsanız çıktıda görünmeyecektir. Tüm belgelere ihtiyacınız varsa YAML'ı --- üzerinden bölün ve her bölümü ayrı ayrı dönüştürün.

✗ Yanlış
# Only the first document is converted
apiVersion: v1
kind: ConfigMap
---
apiVersion: v1
kind: Secret
✓ Doğru
# Convert each document separately
apiVersion: v1
kind: ConfigMap

Yorum Kaybı

YAML # yorumlarını destekler; ancak JSON desteklemez. Tüm YAML yorumları dönüştürme sırasında kalıcı olarak kaybolur — bu bir araç sınırlaması değil, temel bir format farkıdır. JSON'da açıklamaları korumak istiyorsanız, bunları _comment anahtarı veya metadata nesnesi gibi özel bir alan olarak kodlayın.

✗ Yanlış
# This comment will be lost
replicas: 3 # scale this up for production
✓ Doğru
replicas: 3
_comment: scale this up for production

Yaygın Kullanım Senaryoları

Kubernetes Manifest Analizi
Kubernetes YAML manifest'lerini jq ile sorgulamak, Kubernetes REST API'sine göndermek, Terraform veri kaynaklarında işlemek veya JSON bekleyen CI/CD pipeline'larına beslemek için JSON'a dönüştürün.
Docker Compose'dan JavaScript Araçlarına
Docker Compose YAML'ını otomasyon betiklerinde, bağımlılık grafiklerinde veya Node.js araçlarında kullanmak için servis tanımlarını, imaj adlarını, port eşlemelerini ve ortam değişkenlerini JSON'a çıkarmak üzere ayrıştırın.
GitHub Actions API Entegrasyonu
GitHub Actions iş akışı YAML'ını yapıyı programlı olarak doğrulamak, iş ve adım tanımlarını çıkarmak veya JSON iş akışı spesifikasyonu kabul eden CI/CD API'leriyle entegre etmek için JSON'a dönüştürün.
OpenAPI'den İstemci Kod Üretimine
Pek çok kod üreteci (openapi-generator, swagger-codegen, oazapfts) her iki formattaki OpenAPI spesifikasyonlarını kabul eder. Bir araç özellikle JSON girişi gerektirdiğinde veya JSON Schema doğrulayıcılarıyla incelemeniz gerektiğinde YAML spesifikasyonunuzu JSON'a dönüştürün.
Helm Değerleri Analizi
Helm chart values.yaml dosyasını raporlar oluşturmak, ortamlar arasında değerleri karşılaştırmak, politika uygulama araçlarına beslemek veya JSON yapılandırması bekleyen otomasyon araçlarıyla işlemek için JSON'a dönüştürün.
JSON Tabanlı Araçlara Yapılandırma Geçişi
Uygulama yapılandırmasını YAML'dan (altyapı araçlarında yaygın) JavaScript ortamları, REST API'leri, AWS AppConfig, Azure App Configuration veya yapılandırmayı JSON olarak saklayan herhangi bir sistem için JSON'a geçirin.

Teknik Ayrıntılar

merge:true ile parseAllDocuments Üzerinden YAML 1.2 Spesifikasyonu
YAML, { version: '1.2', merge: true } seçenekleriyle parseAllDocuments kullanılarak eemeli/yaml kütüphanesi (v2.8+, CVE güvenli) üzerinden ayrıştırılır. YAML 1.2 şeması, yes ve no gibi çıplak dizelerin güncel YAML spesifikasyonuyla uyumlu biçimde dize (boolean değil) olarak değerlendirilmesini sağlar. merge: true seçeneği, çapa/takma ad birleştirme anahtarlarını (<<: *anchor) tamamen genişleterek JSON çıktısının eksiksiz, referanssız veri içermesini sağlar. Çok belgeli YAML (--- ile ayrılmış) ilk belgeyi döndürür.
Kütüphane Üzerinden Çapa ve Takma Ad Genişlemesi
eemeli/yaml kütüphanesi, döngüsel referans tespiti dahil çapa (&name) ve takma ad (*name) genişlemesini güvenle işler. Birleştirme anahtarı genişlemeleri dahil tüm takma ad atanan veri blokları JSON çıktısında tamamen satır içine alınır. Bu her zaman doğru dönüşümdür çünkü JSON'da referans veya çapa kavramı yoktur. Kütüphanenin güvenli genişlemesi, hatalı biçimlendirilmiş YAML'dan kaynaklanabilecek sonsuz döngüleri önler.
Tarayıcı Tabanlı — Yükleme Yok, Sunucu Yok
Tüm işlem tamamen tarayıcınızın JavaScript motorunda gerçekleşir. Hiçbir veri hiçbir noktada ağ üzerinden iletilmez. 200KB'ı aşan girişler, tarayıcının yanıt vermeye devam etmesi ve yoğun serileştirme sırasında ana iş parçacığının bloke olmasını önlemek için otomatik olarak canlı moddan manuel moda (açık bir Dönüştür tıklaması gerektirir) geçer.

En İyi Uygulamalar

Temiz Dönüştürme için YAML 1.2 Uyumlu Sözdizimi Kullanın
YAML'ınızı YAML 1.2 standartlarıyla yazın — belirsizliği önlemek için yes, no, on, off, y ve n dize değerlerini açıkça tırnak içine alın (örn. enabled: 'yes'). Bu araç YAML 1.2 şemasıyla ayrıştırır (bunlar dizedir); ancak pipeline'ınızdaki eski araçlar YAML 1.1 kullanıyor olabilir (bunları boolean olarak okur). Kaynak YAML'da açıkça tırnak kullanmak, tüm ayrıştırıcılar için en güvenli uygulamadır.
Hassasiyeti Korumak için YAML'da Büyük Sayıları Tırnak İçine Alın
JavaScript, 2^53 - 1'den büyük (9007199254740991) tam sayıları hassas biçimde temsil edemez. Kubernetes'in resourceVersion ve uid alanları gibi sunucu tarafında int64 olan alanlar bu sınırı aşabilir. YAML kaynağınızda bu değerleri tırnak içine alın (resourceVersion: '9007199254740993'); böylece ayrıştırıcı bunları dize olarak değerlendirir ve JSON çıktısında dize değerleri olarak hassas biçimde korunur.
Kullanmadan Önce JSON Çıktısını Doğrulayın
YAML'ı JSON'a dönüştürdükten sonra bir API'ye göndermeden, saklamadan veya programlı olarak işlemeden önce sonucu doğrulayın. Yapının doğru olduğunu teyit etmek için JSON Biçimlendirici'yi kullanın. Bu, yapısal bir hatanın dönüştürme adımında değil, API katmanında kafa karıştırıcı bir reddedişe neden olduğu Kubernetes API çağrıları, OpenAPI spesifikasyonları ve JSON Schema doğrulamalı yükler için özellikle önemlidir.
Dönüştürmeden Önce Çok Belgeli YAML'ı Ayırın
YAML dosyanız birden fazla --- ile ayrılmış belge içeriyorsa ve hepsini JSON olarak almanız gerekiyorsa, önce dosyayı --- üzerinden bölün ve her belgeyi ayrı ayrı dönüştürün. Bu araç yalnızca ilk belgeyi alır. Basit bir yaklaşım: düzenleyicinizde '\n---\n' üzerinden bölün ya da awk kullanın ve her bölümü ayrı ayrı yapıştırın.
Aşağı Akış JSON İşleme için jq Kullanın
YAML'dan JSON aldıktan sonra, jq komut satırından onu sorgulamanın ve dönüştürmenin en hızlı yoludur. Bu aracı jq ile birleştirin: YAML'ı online dönüştürün, JSON'u yapıştırın, ardından tam olarak ihtiyacınız olanı çıkarmak için jq '.spec.replicas' veya jq '.services | keys' kullanın. Toplu dosya işleme için -o json bayrağıyla doğrudan yq CLI'yi kullanın.

Sıkça Sorulan Sorular

YAML'ı online olarak JSON'a nasıl dönüştürürüm?
YAML'ınızı yukarıdaki giriş alanına yapıştırın. Araç, tarayıcınızda anında JSON'a dönüştürür — düğmeye tıklamanıza gerek yok. Seçenekler panelinden çıktı girintisini (2 veya 4 boşluk) ayarlayabilirsiniz. JSON çıktı alanında göründükten sonra panoya kopyalamak için Kopyala'ya veya .json dosyası olarak kaydetmek için İndir'e tıklayın. Her şey yerel olarak çalışır — verileriniz cihazınızdan asla ayrılmaz.
Bu araç çok belgeli YAML'ı (--- ayırıcı) nasıl ele alıyor?
YAML, --- (belge başlangıç işareti) ile ayrılmış tek bir akışta birden fazla belgeyi destekler. Çok belgeli bir YAML yapıştırdığınızda bu araç, eemeli/yaml kütüphanesinin parseAllDocuments işlevini kullanır ve ilk belgeyi JSON olarak döndürür. İlk belgenin ötesindeki ek belgeler sessizce yok sayılır. Tüm belgeleri işlemeniz gerekiyorsa YAML'ınızı --- üzerinden bölün ve her bölümü ayrı ayrı dönüştürün.
YAML çapaları ve takma adları (&anchor ve *alias) nasıl ele alınıyor?
YAML çapaları (&name) yeniden kullanılabilir bir blok tanımlar; takma adlar (*name) buna referans verir. Bu araç, ayrıştırma sırasında tüm çapaları ve takma adları tamamen genişletir; böylece JSON çıktısı eksiksiz, referanssız veri içerir. Örneğin, bir YAML çapası kaynak sınırları kümesi tanımlıyor ve birden fazla servis birleştirme anahtarlarıyla (<<: *anchor) buna referans veriyorsa, JSON çıktısı her servis için tüm alanları açıkça satır içinde gösterir. Bu, JSON'da referans kavramı bulunmadığından her zaman doğru davranıştır. eemeli/yaml kütüphanesi döngüsel referans tespiti dahil çapa/takma ad genişlemesini güvenle işler.
YAML yorumları JSON çıktısında korunuyor mu?
Hayır. JSON hiçbir türde yorumu desteklemez — #, // veya /* */ sözdizimi yoktur. YAML'ı JSON'a dönüştürdüğünüzde tüm yorumlar kalıcı olarak kaybolur. Bu, bir araç sınırlaması değil, temel bir format farkıdır. Açıklamaları korumak istiyorsanız, bunları dönüştürmeden önce özel bir JSON alanı olarak kodlayın (bir _comment anahtarı gibi) veya yorumların bulunduğu YAML kaynağını yetkili sürüm olarak saklayın.
Kubernetes manifest'i ile bu aracı nasıl kullanırım?
Kubernetes YAML manifest'inizi (bir .yaml dosyasından, kubectl get -o yaml çıktısından veya Helm şablonundan) giriş alanına yapıştırın. JSON çıktısı daha sonra jq ile sorgulanabilir, Kubernetes REST API'sine doğrudan gönderilebilir, Terraform veri kaynaklarında kullanılabilir veya JSON bekleyen herhangi bir araç tarafından işlenebilir. Yaygın bir iş akışı, YAML manifest'lerini JSON'a dönüştürüp belirli alanları çıkarmaktır — örneğin replica sayılarını doğrulamak için JSON çıktısı üzerinde jq '.spec.replicas' çalıştırmak. Yukarıdaki K8s Deployment örneği, yükleyip değiştirebileceğiniz tam bir manifest'i göstermektedir.
Bu araç Docker Compose dosyalarıyla nasıl yardımcı oluyor?
Docker Compose dosyaları YAML formatındadır. Bunları JSON'a dönüştürmek, servis tanımlarını JavaScript araçlarıyla, jq betikleriyle veya JSON okuyan herhangi bir sistemle işlemenizi sağlar. Yaygın kullanım durumları arasında bağımlılık listesi oluşturmak için tüm imaj adlarını çıkarmak, compose dosyasından raporlar üretmek veya JSON kabul eden CI/CD orkestrasyon araçlarına Compose yapılandırmalarını beslemek sayılabilir. compose.yaml dosyanızı giriş alanına yapıştırın; JSON çıktısı anında aşağı akış işlemleri için hazır olacaktır.
YAML 1.1 ile YAML 1.2 arasındaki fark nedir ve bu araç hangisini kullanıyor?
YAML 1.1 (eski spesifikasyon; PyYAML, Ansible, Ruby Psych ve pek çok Kubernetes aracı tarafından hâlâ kullanılıyor), yes, no, on, off, y ve n gibi çıplak dizeleri boolean true/false olarak değerlendirir. Bu durum, ünlü Norway sorununa yol açtı — 'NO' ISO ülke kodu false olarak ayrıştırıldı. YAML 1.2 (2009'da yayımlanan güncel spesifikasyon) bunu düzeltti: tüm çıplak dizeler dize, yalnızca true/false boolean. Bu araç ayrıştırma için YAML 1.2 şemasını kullanır; yani YAML girişinizdeki yes ve no değerleri JSON çıktısında boolean true ve false yerine 'yes' ve 'no' dize değerleri olarak korunur. Bu doğru, modern davranıştır. YAML'ınız başlangıçta YAML 1.1 ayrıştırıcısı için yazılmış ve yes/no'yu boolean olarak kullanıyorsa, JSON çıktısının bunları dize olarak değerlendireceğini unutmayın.
YAML neden sekme girintisini yasaklıyor?
YAML spesifikasyonu, girinti için sekme karakterlerini (\t) açıkça yasaklar — yalnızca boşluklara izin verilir. Bu, farklı düzenleyicilerdeki tutarsız sekme genişliğinin yol açtığı belirsizliği önlemek için bilinçli bir tasarım kararıdır. YAML'ınız girinti için sekme kullanıyorsa (boşlukları sekmeye otomatik dönüştüren metin düzenleyicilerinden yapıştırma sırasında yaygındır), YAML ayrıştırıcısı bir ayrıştırma hatası fırlatır. Çözüm, tüm sekme girintisini boşlukla değiştirmektir. Çoğu kod düzenleyicide sekmeleri boşlukla dönüştürme ayarı bulunur (örneğin Vim'de «Sekmeleri Genişlet», VS Code'da «Boşluk Ekle»). YAML yapıştırdıktan sonra «tab» veya «indentation» içeren bir ayrıştırma hatası görüyorsanız, neredeyse her zaman bu neden geçerlidir.
YAML'ı JSON'a dönüştürürken büyük sayılar hassasiyetini kaybedebilir mi?
Evet. Bu, tüm tarayıcı tabanlı araçları etkileyen temel bir JavaScript sınırlamasıdır. JavaScript'in IEEE 754 çift duyarlıklı kayan nokta değeri, tam sayıları yalnızca 2^53 - 1'e kadar (9007199254740991) hassas biçimde temsil edebilir. Bundan büyük YAML sayıları — Kubernetes'in resourceVersion gibi int64 alanları — YAML ayrıştırıcısı onları JavaScript'in number türüne aktarırken sessizce yuvarlanır. Örneğin, 9007199254740993 YAML değeri JSON çıktısında 9007199254740992 olur. Güvenli geçici çözüm, YAML kaynağında büyük sayıları tırnak içine almaktır (resourceVersion: '9007199254740993'); böylece ayrıştırıcı bunları dize olarak değerlendirir ve JSON çıktısında dize değerleri olarak hassas biçimde korunur.
YAML'ı komut satırından JSON'a nasıl dönüştürürüm?
En yaygın yaklaşım yq (Mike Farah sürümü) ve jq kullanmaktır. yq'yu yükleyin: macOS'ta brew install yq, Linux için github.com/mikefarah/yq/releases adresinden indirin. Ardından çalıştırın: yq -o json input.yaml (YAML dosyasını JSON'a dönüştürür), ya da cat input.yaml | yq -o json - (stdin'den boru ile aktarmak için). Güzel yazdırılmış çıktı için: yq -o json input.yaml | jq . — JSON'u tutarlı biçimlendirme için jq üzerinden boru ile aktarır. Python tek satırı: python3 -c "import sys, json, yaml; print(json.dumps(yaml.safe_load(sys.stdin), indent=2))" < input.yaml. yq ile çok belgeli YAML için: yq -o json '.[0]' input.yaml (yalnızca ilk belgeyi JSON olarak çıkarır).
Bu aracı kullanırken YAML verilerim sunucuya gönderiliyor mu?
Hayır. Tüm dönüştürme işlemi tamamen tarayıcınızda JavaScript kullanılarak gerçekleşir. YAML verileriniz ağ üzerinden iletilmez, hiçbir sunucuda saklanmaz ve kayıt altına alınıp analiz edilmez. Bu, aracı Kubernetes sırları, veritabanı kimlik bilgileri, dahili Helm değerleri, yapılandırma dosyalarındaki API anahtarları ve diğer hassas altyapı yapılandırmalarıyla güvenle kullanmanızı sağlar. Bunu tarayıcınızın Ağ sekmesini açarak doğrulayabilirsiniz — YAML yapıştırdığınızda sıfır istek tetiklendiğini göreceksiniz.
YAML girişi için dosya boyutu sınırı var mı?
Sabit bir dosya boyutu sınırı yoktur; ancak 200KB'ı aşan büyük girişler otomatik olarak canlı dönüştürmeden manuel moda geçer. Manuel modda, bir Dönüştür düğmesi görünür ve dönüştürme yalnızca siz tıkladığınızda çalışır — bu, her tuş vuruşunda tarayıcının ana iş parçacığının bloke olmasını önler. Çok büyük YAML dosyaları için (birden fazla megabayt) daha iyi performans için yq gibi komut satırı araçlarını kullanmayı düşünün. Araç, tam Kubernetes ad alanı dışa aktarmaları, büyük OpenAPI spesifikasyonları ve çok servisli Helm chart değerleri dosyaları gibi tipik gerçek dünya yüklerini verimli biçimde işler.