Paeonia: Json encode: ohne backslashes

Hallo zusammen,

ich lese eine URI als String aus einer Postgres-Datenbank:
Eintrag in Datenbank, Feld "flaglink" = http://domain/users/flag.png (copy und paste aus phpPgAdmin)

Ich lese den Feldinhalt per code aus:
while($row = pg_fetch_row($results)) {
        $responce->url[$i]['flaglink']=$row[$i];
$i++;
}
echo json_encode($responce); liefert {"url":[{"flaglink":"http://domain/users/flag.png"}]}

$responce->url[$i]['flaglink']=stripslashes($row[$i]); -> keine Änderung

Wie entferne ich die backslashes bevor das json-object ausgeliefert wird?

Danke für Eure Antworten.

paeonia

  1. Hi!

    echo json_encode($responce); liefert {"url":[{"flaglink":"http://domain/users/flag.png"}]}
    $responce->url[$i]['flaglink']=stripslashes($row[$i]); -> keine Änderung
    Wie entferne ich die backslashes bevor das json-object ausgeliefert wird?

    Wenn die Slashes erst durch das json_encode() reinkommen, ist alles andere sinnlos, als das Ergebnis von json_encode() zu bearbeiten. Zudem solltest du dir im Klaren sein, welche Zeichen stripslashes() alle entfernt und prüfen, ob sich das mit deinem Anwendungsfall deckt. Ansonsten müsstest du eine Stringersetzung verwenden.

    (Ab PHP 5.4 gibt es für json_encode() einen Parameter im Handbuch nachzulesen. 5.4 gibt es aber erst als Beta.)

    Lo!

  2. Hi,

    Wie entferne ich die backslashes bevor das json-object ausgeliefert wird?

    Warum willst du sie entfernen?

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hi,

      Warum willst du sie entfernen?

      weil ich ein ordentlicher Mensch bin und lieber sofort brauchbare Objekte liefere. Aber viellicht bin ich zu pingelig.

      Danke für Eure Antworten

      Gruß von Paeonia

      1. Hi,

        Warum willst du sie entfernen?

        weil ich ein ordentlicher Mensch bin und lieber sofort brauchbare Objekte liefere.

        Was soll denn daran nicht "brauchbar" sein?

        var_dump(json_decode('{"flaglink":"http:\/\/domain\/users\/flag.png"}'));  
          
        // Ausgabe:  
        // object(stdClass)#1 (1) {  
        //   ["flaglink"]=>  
        //   string(28) "http://domain/users/flag.png"  
        // }
        

        Perfectly "brauchbar".

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          ich arbeite mit AJAX und lese das object per javascript ein -> replace funktioniert

          Danke für die Antwort.

          Gruß von Paeonia

          1. Hi,

            ich arbeite mit AJAX und lese das object per javascript ein -> replace funktioniert

            *Wozu* irgendwas "replacen"?

            var o = JSON.parse('{"flaglink":"http:\/\/domain\/users\/flag.png"}');  
            alert(o.flaglink);
            

            -> liefert http://domain/users/flag.png

            Und auch ohne native JSON-Unterstützung im Browser,

            eval('var o = {"flaglink":"http:\/\/domain\/users\/flag.png"}');  
            alert(o.flaglink);
            

            Du hast Probleme, die keine sind ...

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hi,

              Du hast Probleme, die keine sind ...

              Da hast Du recht, das habe ich auch gerade gemerkt, als das JSON.parse-Beispiel endlich lief.

              aber jetzt habe ich ein echtes Problem:

              Ich kann die Syntax nicht korrekt formulieren für folgenden Code:

                
              var flagoptions = OpenLayers.loadURL(  
                 "domain.de/basicfunctions.php",  
                 '',  
                 this,  
                 setFlagLink,  
                 sefNOFlagLink  
              );  
                
              function setFlagLink(response) {  
                 var oops = response.responseText;  
                 var myData = JSON.parse(  
                     oops, function (key, value) {  
                        var type;  
              	  if (value && typeof value === 'object') {  
              	      type = value.type;  
              	      if (typeof type === 'string' && typeof window[type] === 'function') {  
              			return new (window[type])(value);  
              	      }  
              	 }  
              	return value;  
                  });  
                  console.log(myData.cell)	;			  
                  return myData.cell;  
              };  
              console.log(flagoptions);  
              
              

              Wie kann ich erreichen, dass flagoptions == myData.cell ist. Ich habe Probleme mit der Variablenübergabe.

              Danke noch mal.

              Gruß von Paeonia