Ankündigung

Einklappen
Keine Ankündigung bisher.

json_decode meldet JSON_ERROR_SYNTAX

Einklappen

Neue Werbung 2019

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

  • json_decode meldet JSON_ERROR_SYNTAX

    Hallo Zusammen,

    über einen REST-API Server bekomme ich dieses Result:

    Code:
    C:\projects\Versuche\REST_API\Client.php:10:string '[{"PERSONID":89388,"NAMEN":"Kn\u00C3\u00B6ferl","VORNAME":"Dora","GESCHLECHT":0,"GEBURTSDATUM":"1934-03-15T00:00:00.000+01:00","ERSTVEREINID":1511}]' (length=148)
    
    
    [
      {
        "PERSONID": 89388,
        "NAMEN": "Knöferl",
        "VORNAME": "Dora",
        "GESCHLECHT": 0,
        "GEBURTSDATUM": "1934-03-15T00:00:00.000+01:00",
        "ERSTVEREINID": 1511
      }
    ]


    json_decode meldet JSON_ERROR_SYNTAX wenn die Eckige Klammen um Anfang und am Ende sind. Aber das ist doch korrekt.


    PHP-Code:
    $api = new APIClient($username,$password);

    $person $api->get_person($personid);

    echo 
    '<pre>';

    var_dump($person);
    var_dump(json_decode($person));


    switch(
    json_last_error()) {
        case 
    JSON_ERROR_NONE:
            echo 
    ' - Keine Fehler';
            break;
        case 
    JSON_ERROR_DEPTH:
            echo 
    ' - Maximale Stacktiefe überschritten';
            break;
        case 
    JSON_ERROR_STATE_MISMATCH:
            echo 
    ' - Unterlauf oder Nichtübereinstimmung der Modi';
            break;
        case 
    JSON_ERROR_CTRL_CHAR:
            echo 
    ' - Unerwartetes Steuerzeichen gefunden';
            break;
        case 
    JSON_ERROR_SYNTAX:
            echo 
    ' - Syntaxfehler, ungültiges JSON';
            break;
        case 
    JSON_ERROR_UTF8:
            echo 
    ' - Missgestaltete UTF-8 Zeichen, möglicherweise fehlerhaft kodiert';
            break;
        default:
            echo 
    ' - Unbekannter Fehler';
            break;
    }


    echo 
    '</pre>'

  • #2
    Wenn die Daten in der DB in utf8 stehen, dann ist das Script welches json erstellt oder die DB ausliest in ISO-8859-1 abgespeichert, da musst du mal nachsehen wie der Editor die Dateien speichert.

    PHP-Code:
    var_dump(json_decode(utf8_decode($person))); 
    löst dein Problem nicht sondern zeigt lediglich das es wohl in ISO-8859-1 übertragen wurde. JSON sollte aber utf8 sein und da musst du ansetzen.

    Kommentar


    • #3
      Info: Die Meldung (in englisch) kannst du auch direkt ohne dem ganzen case bekommen: http://php.net/manual/de/function.js...-error-msg.php
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        PHP-Code:
        //copy
        $jsonStr '[{"PERSONID":89388,"NAMEN":"Kn\u00C3\u00B6ferl","VORNAME":"Dora","GESCHLECHT":0,"GEBURTSDATUM":"1934-03-15T00:00:00.000+01:00","ERSTVEREINID":1511}]';

        debug::write($jsonStr); 
        Resultat (Auszug):
        [18.04.2018 07:47:54,460](387k/411k) Debug::write ...
        0 string(151) UTF-8 BOM "\xef\xbb\xbf[{"PERSONID":89388,"NAMEN":"Kn\\u00C3\\u00B6ferl "," VORNAME":"
        Alles klar?
        Das BOM (3 Byte) sitzt für echo und var_dump unsichtbar vor der ersten eckigen Klammer !

        Kommentar


        • #5
          Gut erkannt jspit. Wenn man seinen Text aus dem Forum in einen Texteditor kopiert, sieht man die Zeichen sogar:
          Code:
          C:\projects\Versuche\REST_API\Client.php:10:string '[{"PERSONID":89388,"NAMEN":"Kn\u00C3\u00B6ferl","VORNAME":"Dora","GESCHLECHT":0,"GEBURTSDATUM":"1934-03-15T00:00:00.000+01:00","ERSTVEREINID":1511}]' (length=148)

          Kommentar


          • #6
            Das ist der richtige Hinweis. Besten Dank Leute.

            Kommentar

            Lädt...
            X