Wie behebe ich 'Ungültige JSON' Fehler auf Minecraft PC?

Ich bin seit fast zwei Stunden hier und niemand scheint das gleiche Problem zu haben wie ich und ich bezweifeln, dass dies gelöst wird, aber ich werde es trotzdem versuchen.

Das ist der code

/tellraw @p ["Would you like to teleport?",{"text":"Yes","color":"green","bold":"true","clickEvent":{"action":"run_command","value":"/tp @p ~ ~4 ~ "},"hoverEvent":{"action":"show_text","value":{"text":"Confirm"}},{"text":"No","color":"red","bold":"true","clickEvent":{"action":"run_command","value":"/tellraw @p{"text":"Come back when you want to teleport"}"}}}] 

Dieser Teil ist in Ordnung

 /tellraw @p ["Would you like to teleport?",{"text":"Yes","color":"green","bold":"true","clickEvent":{"action":"run_command","value":"/tp @p ~ ~4 ~ "},"hoverEvent":{"action":"show_text","value":{"text":"Confirm"}} 

Es ist nur, wenn ich das hinzufüge

 ,{"text":"No","color":"red","bold":"true","clickEvent":{"action":"run_command","value":"/tellraw @p{"text":"Come back when you want to teleport"}"}}}] 

Minecraft gibt mir den Fehler:

Ungültiger JSON in Zeile 1 Spalte 203

Ich habe versucht, es herauszuholen und herauszufinden, welche Spalte 203 ist, aber ich kann nicht, ich weiß nicht was ich tat. Wer hat irgendwelche Ideen?

Das 'JSON' (oder ' J ava s cript O bject N otation') ist der Teil des Minecraft Befehls, der von eckigen Klammern umgeben ist. Die eckigen Klammern stellen ein Array dar, und alle Hauptobjekte (geschweifte Klammern) sind Teil dieses Arrays.

Wenn du dein Array oder deine Objekte nicht richtig eingestellt hast, kann Minecraft nicht interpretieren, was dein Kommando bedeutet. Zum Glück gibt es einige Werkzeuge, die du benutzen kannst, um dir zu helfen, das zu debuggen.


Das erste, was in diesen Situationen zu tun ist, um Ihre JSON-Saite zu formatieren, um es leichter zu lesen. JSONLint kann dafür verwendet werden. Fügen Sie den Teil Ihres Befehls aus der eckigen Klammer ein, führen Sie den Validator aus und kopieren Sie den formatierten JSON.

Zweitens möchten Sie Ihre JSON-String validieren. Sie können auch JSONLint verwenden, um Einstellungen zu validieren, aber ich finde JSON Formatter & Validator ein bisschen einfacher zu bedienen, da es eine Geschichte von Änderungen hält, so dass Sie zurück zu einer bestimmten Version gehen können, wenn Sie müssen.

Hier ist der Zusammenbruch deiner JSON String und der Fehler JSON Formatter & Validator gefunden:

JSON Formatter & Validierung Ausgabe

Das erste, was ich sehen kann ist, dass in deinem ClickEvent-Wert das 'Text' -Teil hervorgehoben wird, weil die doppelten Anführungszeichen, die du hier benutzt hast, nicht so interpretiert werden, wie du es willst. In diesem Fall möchten sie, dass sie als "Text" behandelt werden, um später in deinem Klickereignis verwendet zu werden, aber im Moment denkt der JSON-Interpreter, dass sie das 'Ende' der JSON-Anweisung sind.

Sie müssen einen Backslash hinzufügen, um Ihren internen doppelten Anführungszeichen zu entgehen, damit sie als Text behandelt werden können:

 "value": "/tellraw @p{\"text\":\" Come back when you want to teleport \"}" ^ | ^ ^ ^ ^ external | these ones are 'escaped' because they quote mark | are 'inside' the external quotes 

Lass es uns reparieren und es wieder laufen lassen:

Validierung Ausgang # 2

Jetzt ist nur noch ein Fehler übrig. Dies geschieht, weil das Objekt oberhalb der hervorgehobenen Klammer nicht ordnungsgemäß mit einer passenden Nahklammer geschlossen ist:

Fehlende Klammer

Der Dolmetscher erwartet, dass Sie das Objekt schließen, bevor Sie ein neues beginnen:

  [ "Would you like to teleport?", { "text": "Yes", "color": "green", "bold": "true", "clickEvent": { "action": "run_command", "value": "/tp @p ~ ~4 ~ " }, "hoverEvent": { "action": "show_text", "value": { "text": "Confirm" } }}, ^ add this 

Laufen wieder, es scheint, dass der Fehler an diesem Objekt behoben, aber jetzt gibt es eine zusätzliche enge Klammer an der Unterseite:

Erwartung von Komma oder engen eckigen Klammern

" Erwarten von Komma oder ']' bedeutet, dass es erwartet, dass Sie ein anderes Element (mit Komma) hinzufügen oder das Array beenden (mit eng-quadratischer Klammer). Diese enge Klarsicht macht hier keinen Sinn.

Entfernen Sie diese extra lockige Klammer und tada!

Gültiges JSON

Hier ist dein gültiges JSON-Array (du kannst es auf eine einzelne Zeile reduzieren und das Kommando-Sachen selbst hinzufügen). Ich gebe keine Garantien, dass es tun wird, was du willst , aber zumindest ist es jetzt gültig.

 ["Would you like to teleport?", { "text": "Yes", "color": "green", "bold": "true", "clickEvent": { "action": "run_command", "value": "/tp @p ~ ~4 ~ " }, "hoverEvent": { "action": "show_text", "value": { "text": "Confirm" } } }, { "text": "No", "color": "red", "bold": "true", "clickEvent": { "action": "run_command", "value": "/tellraw @p{\"text\":\"Come back when you want to teleport\"}" } }] 

Erstens beziehen sich die "Zeilen" und "Spalten" grundsätzlich auf die Zeichen im Text. Da all dein Code (der Befehl) alles auf einer Zeile ist – macht es Sinn. Die Spalte ist jedoch die einzelnen "Blöcke", die jeder Charakter sitzt.

  | 0 | 1 | 2 | 3 | 4 | 1 | H | E | L | L | O | 

Wie Sie sehen können, beginnt das Wort bei 'Zeile 1, Spalte 0' und endet bei 'Zeile 1, Spalte 4'. Also in Bezug auf deinen Fehler, das 204. Zeichen (erinnere dich, bei 0 zu beginnen!) Ist der Charakter, der deinen Befehl auslöst. Seltsamerweise bezieht sich dieser Fehler jedoch auf den Abschnitt des Befehls nach dem Ziel (dh @p ) – einschließlich des Raumes.

  | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... 1 | | { | " | t | e | x | t | " | ... 

HINWEIS: Es könnte nicht ein Charakter sein, der bereits in deinem Befehl existiert, es könnte auch ein Charakter sein, der erwartet wird , aber nicht da ist.