Das offizielle Minecraft Wiki twittert hier: Wiki-Twitter  –  Chatte im Wiki-Discord  – Noch keinen Server gefunden? Es gibt einen Wiki-Server

JSON

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche

JSON (JavaScript Object Notation) ist ein Format zur Beschreibung von Daten. JSON-Dateien sind auch Teil von Ressourcenpaketen und Datenpaketen und gehören somit zur Plugin API, d.h. zu den Dateien, mit denen man das Spiel ändern kann, ohne das Programm modifizieren zu müssen (z.B. Texturen, Sounds etc.).

Dateien, die ein JSON-Format enthalten, sind meist vom Dateityp ".json", aber jeder andere Dateityp ist auch möglich, z.B. ".mcmeta" für Minecraft Metadaten, denn JSON-Dateien sind lesbare Textdateien, die mit jedem Texteditor geöffnet werden können.

JSON und SNBT[Bearbeiten]

In Minecraft wird JSON z. B. zur Beschreibung von Standard-Ressourcen und Standard-Weltdaten verwendet. Außerdem benutzt das Spiel JSON intern zur Formatierung von Texten. Die entsprechenden Eigenschaften sind im Artikel JSON-Text genau beschrieben. Auch bei einigen Befehlen kann JSON-Text eingegeben werden, z. B. beim Befehl /tellraw.

JSON beschreibt Daten, die eine Baumstruktur haben können: Eine Eigenschaft kann Untereigenschaften haben und diese weitere Untereigenschaften etc. Diese Struktur gibt es auch bei den NBT-Daten (Named Binary Tag). NBT ist das Format, in dem die Spielstand-Speicherung stattfindet. Alle Blöcke und die Positionen und Eigenschaften aller Wesen und Objekte werden im NBT-Format in Dateien gespeichert. Diese Dateien sind nicht mit einem Texteditor lesbar, man benötigt dafür einen speziellen NBT-Editor.

Einige Befehle ermöglichen jedoch die Eingabe von NBT-Daten in Textform. Die entsprechende Schreibweise wird Stringified NBT (SNBT) genannt. SNBT sieht ähnlich wie JSON aus, hat aber einige Unterschiede. SNBT ist weniger strikt, man kann beispielsweise die doppelten Anführungsstriche bei Namen und anderen Ein-Wort-Texten weglassen.

Der in Minecraft integrierte Datengenerator wandelt NBT-Dateien in SNBT um, so dass man ihren Inhalt ohne Fremdprogramm sehen kann.

Elemente von JSON und SNBT[Bearbeiten]

Ein Text wird immer mit doppelten Anführungszeichen markiert. In SNBT können die Anführungszeichen auch weggelassen werden, wenn ein Text nur aus einem einzigen Wort besteht.

Einige spezielle Zeichen in einem Text müssen mit einem vorangestellten Backslash (Rückwärtsschrägstrich) gekennzeichnet werden, z.B \" für ein Anführungszeichen innerhalb eines Textes oder \n für einen Zeilenumbruch. Wenn Texte geschachtelte JSON-Elemente mit Texten enthalten, müssen je nach Schachtelungstiefe weitere Backslashes verwendet werden (siehe Escaping).

"Beispielwort"
"Beispiel für einen Text mit mehreren Worten"
"Dieser \"Text\" enthält einen\nZeilenumbruch"
SNBT-Beispiel

Eine Zahl wird von JSON automatisch erkannt. In SNBT kann ein Zusatzbuchstabe den Datentyp angeben:

  • b = Byte
  • s = Short
  • nichts = Int
  • l = Long
  • f = Float
  • d = Double

Oft kann man diese Kennzeichnung weglassen, aber bei manchen NBT-Daten muss sie unbedingt angegeben werden, damit der Wert eine Auswirkung hat. Der Datentyp kann für jeden NBT-Parameter durch das NBT-Symbol abgelesen werden, z.B. steht
für Byte. Das Überfahren des Symbols mit der Maus zeigt den Datentyp zusätzlich an.

123
0b
0.5f

Eine Eigenschaft besteht aus einem Namen und einem Wert, die durch einen Doppelpunkt getrennt sind. Der Name ist immer ein Text, der Wert kann auch ein Text sein oder eine Zahl. Bei JSON muss auch der Name in doppelten Anführungszeichen stehen, bei SNBT ist das nicht nötig.

"Name1":"Ein JSON-Beispiel"
"Name2":0.5
Name3:"Ein SNBT-Beispiel"
Name4:0.5f

Ein Objekt kann beliebig viele Eigenschaften und Unterobjekte haben. Die Reihenfolge ist dabei unerheblich. Das Objekt hat einen Namen mit Doppelpunkt, gefolgt von einer geschweiften Klammer. Dann folgen durch Komma getrennt die Eigenschaften und Unterobjekte. Achtung: nach dem letzten Element folgt kein Komma. Zum Schluss endet das Objekt wieder mit einer geschweiften Klammer:

"Objektname":
{
  "Name1":25.0,
  "Name2":"Text"
}

Bei einer Liste ist im Gegensatz zum Objekt die Reihenfolge der Aufzählungselemente bedeutsam. Außerdem sind alle Listenelemente vom selben Datentyp. Listen werden mit eckigen Klammern markiert:

"Listenname":
[
  "Text1",
  "Text2",
  "Text3"
]

In seltenen Fällen werden Zahlen zu Arrays zusamengefasst. In SNBT muss dann ein Zusatzbuchstabe den Datentyp angeben. Ohne den Datentyp wird die Eingabe als Liste interpretiert, nicht als Array.

  • B; = Byte
  • I; = Integer
  • L; = Long
FadeColors:[I;100,200,300]

Kommentare sind in JSON nicht vorgesehen. Weil das Spiel aber unbekannte Eigenschaften ignoriert, kann man eine Eigenschaft z.B. "__comment" nennen und dort einen Freitext schreiben. Dies ist bei SNBT und JSON an vielen Stellen beliebig oft möglich und wird auch von den Spielentwicklern so gemacht:

"Objektname":
{
  "__comment":"Ein Kommentar in JSON",
  "Name1":"Text1",
  __comment:"Das ist ein Kommentar in SNBT",
  Name1:Text1
}

Eine Baumstruktur wird gebildet, indem ein Objekt Unterobjekte enthält. Hier ein Beispiel für SNBT:

{
  Name1:Wert1,
  Name2:Wert2,
  Unterobjekt:
  {
    Name3:Wert3,
    Name4:Wert4,
    UnterunterobjektA:
    {
      Name5:Wert5
    },
    UnterunterobjektB:
    {
      Name6:Wert6
    }
  }
}

Beispiele[Bearbeiten]

Die Struktur für die Definitionsdatei eines Ressourcenpaketes sieht auszugsweise so aus:


  • Die namenlose Haupteigenschaft.

    • pack:
      Alle allgemeinen Daten für das Ressourcenpaket.

      • description:
        Die Beschreibung des Ressourcenpaketes (...)

      • pack_format:
        Das Format des Ressourcenpaketes (...)

und wird in Form von JSON so in eine Mcmeta-Datei geschrieben:

{
  "pack":
  {
    "description": "eine Beschreibung",
    "pack_format": 1
  }
}

Die NBT-Daten für reitende Wesen sehen in den Objektdaten und Kreaturdaten auszugsweise so aus:


  • Alle Objekt- bzw. Kreaturdaten

    • Type:
      0 = Pferd, 1 = Esel, 2 = Maultier, 3 = Zombiepferd, 4 = Skelettpferd

    • Tame:
      1 oder 0 (true/false) - zahm ja/nein

    • Passengers:
      Liste mit Objekten, die dieses Objekt als Passagier hat

      • Ein Passagier

        • id:
          Objekt-ID

        • Invulnerable:
          1 oder 0 (true/false) - unverwundbar ja/nein

und werden in Form von SNBT so beim Befehl /summon verwendet:

/summon skeleton_horse ~ ~ ~
{
  Tame:1,
  Passengers:
  [
    {
      id: skeleton,
      Invulnerable:1
    },
    {
      id: zombie,
      Invulnerable:1
    }
  ]
} 

Der Befehl /tellraw erwartet JSON-Text, hier ein Beispiel:

/tellraw @p 
[
  {"text":"Fettgrün ", "color":"green", "bold":true},
  {"text":"und kursiv ", "italic":true}
]

Siehe auch die Beispiele zur Baumstruktur unter Befehl#NBT-Daten.

Geschichte[Bearbeiten]

Promotional Content