YAML: Werte überschreiben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • YAML: Werte überschreiben

    Hallo zusammen,
    ich hoffe das ich den richtigen Bereich getroffen habe, sofern nein, bitte verschieben :-)

    Es geht um das Thema YAML
    Nein, nicht das CSS Framework, sondern die Auszeichnungssprache zur Datenserialisierung. YAML Aint Markup Language

    Und zwar benutzte ich diese zusammen mit dem PHP parser "Spyc".
    Ich habe folgende Beispiel YAML Datei

    Code:
    development:
      key1: value1
      key2: value2
      key3:
        subKey1: subValue1
        subKey2: subValue2
        subKey3:
          subSubKey1: subSubValue1
          subSubKey2: subSubValue2
        subKey4: subValue4
      key4: value4
    Jetzt möchte ich einen weiteren Kontext hinzufügen nämlich die Produktion. Hier müssen alle Daten die es auch im development gibt ebenfalls zur verfügung stehen. Hier gibt es 2 Möglichkeiten, setzt voraus das bei dem obigen ein Anchor gesetzt wird

    Code:
    development: &development
    1)
    Code:
    production:
      <<:*development
    hier werden die arrays zusammengeführt

    2)
    Code:
    production: *development
    hier wird ein alias gesetzt

    Beides funktioniert super!

    Jetzt möchte ich aber bestimmte Werte im production ändern. zB subSubKey1
    Also gehe ich hin und schreibe folgendes

    Code:
    production:
      <<:*development
      key3:
        subKey3:
          subSubKey1: overwrite
    Überschrieben wird, aber alles was vorher unterhalb von subKey3 war ist weg ausser das was ich gerade überschrieben habe!

    Ich müsste jetzt quasie key3 und subKey3 auch einen Anchor setzten und diesen über ein Alias ansprechen. Sprich:


    Code:
    development: &development
      key1: value1
      key2: value2
      key3: &key3
        subKey1: subValue1
        subKey2: subValue2
        subKey3: &subKey3
          subSubKey1: subSubValue1
          subSubKey2: subSubValue2
        subKey4: subValue4
      key4: value4
    ---
    production:
      <<:*development
      key3: *key3
        subKey3: *subKey3
          subSubKey1: overwrite

    Das würde funktionieren, aber ich habe ein relativ grosses YAML file mit mehreren Konexten.. Gibts hier keine möglichkeit das ich ein Kontext komplett kopiere und trotzdem an gewissen stellen überschreiben kann ?


    Über jeden Tipp ect pp würde ich mich sehr freuen !!!!

    Cheers
    Julian
    Zuletzt geändert von kj187; 22.12.2009, 15:30.

  • #2
    Zitat von kj187 Beitrag anzeigen
    Gibts hier keine möglichkeit das ich ein Kontext komplett kopiere und trotzdem an gewissen stellen überschreiben kann ?
    Genau das machst du bereits. Du kopierst den Dev-Kontext und dann überschreibst du eine gewisse Stelle, nämlich key3. Works as designed.
    Du bräuchtest eine Pfad-Notation, um key3:subKey3:subSubKey1 direkt ansprechen zu können. Afaik gibt es solch eine Notation in YAML nicht.

    Du kannst Spyc erweitern. Oder du hältst den Baum flach, etwa so:
    Code:
    development:
      key1: value1
      key2: value2
      key3_subKey1: subValue1
      key3_subKey2: subValue2
      key3_subKey3_subSubKey1: subSubValue1
      key3_subKey3_subSubKey2: subSubValue2
      key3_subKey4: subValue4
      key4: value4

    Kommentar

    Lädt...
    X