2015-12-02 40 views
1

我想this YAML片段轉換爲有效的JSON:如何這個YAML轉換成JSON

apiVersion: v1 
kind: Service 
metadata: 
    name: my-nginx-svc 
    labels: 
    app: nginx 
spec: 
    type: LoadBalancer 
    ports: 
    - port: 80 
    selector: 
    app: nginx 
--- 
apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: my-nginx 
spec: 
    replicas: 2 
    template: 
    metadata: 
     labels: 
     app: nginx 
    spec: 
     containers: 
     - name: nginx 
     image: nginx 
     ports: 
     - containerPort: 80 

如何---翻譯成JSON?

http://yamltojson.com/不會將此YAML識別爲有效。

+0

您是否試圖解決這個問題一次,或者您是否試圖用特定語言實現一個通用解決方案? –

回答

0

--- and ...可能出現在YAML文檔的開始和結尾,分別表示它的開始和結束。 YAML格式的怪癖。

因此,您提供的代碼段實際上並不是有效的YAML。也許這是兩個文件並置。

+0

什麼可能是等效的JSON,如果我必須發送一個單一文件中的連接版本到使用它的工具(在我的情況下,它是Kubernetes http://kubernetes.io/) –

+0

給出的YAML絕對是有效的YAML流。根據規範:「YAML流由零個或多個文檔組成,後續文檔需要某種分隔標記行,如果文檔沒有以文檔結束標記行結束,則以下文檔必須以指令結束標記行開頭「。 '---'是「指令結束標記行」。指令列表可能是空的,所以上面的YAML是一個有效的YAML流。 Ruby的'YAML.load_stream'沒有問題。看看:http://ideone.com/THDnDx –

1

你的問題並沒有說明你是否試圖用特定的語言來解決這個問題。儘管Assaf說,這一個有效的YAML流。該YAML規範說:

一個YAML 由零個或多個文件。後續文件需要某種分隔標記線。如果文檔沒有被文檔結束標記行終止,則以下文檔必須以指令結束標記行開頭。 (http://www.yaml.org/spec/1.2/spec.html#id2801681

「指令結束標記行」是這樣的:---。這就是所謂的,因爲它是在YAML文檔開始處的指令之後(例如%YAML 1.2)。但是指令列表可能是空的,所以---本身是指示文檔開始的有效方式。

但是,沒有標準的方式來表示JSON中的多個文檔,所以如果能夠以及如何完成這個操作,完全取決於使用JSON文件的API。有一些common ways表示JSON數據流可能會或可能不會再工作,具體取決於使用數據的API是否理解它。例如,這威力工作:

{ 
    "apiVersion": "v1", 
    "kind": "Service", 
    // ... 
} 
{ 
    "apiVersion": "v1", 
    "kind": "ReplicationController", 
    // ... 
} 

這就是所謂的(一些人,反正)Line Delimited JSON

但是,它完全取決於消費數據的API是否理解這種格式,這不是正式的或「官方」的規範。如果可能的話,您應該查閱API文檔或與API的製造商聯繫,找出正確的方法來做你想做的事情。