2017-11-19 3 views
-4

in php Ich habe dies:php json_encode in Go

<?php 
    $x = array(1,2,3,4); 
    $y = json_encode($x); 
    echo $y; 
?> 

, die ihr Ergebnis ist:

[1,2,3,4] 

in gehen, wenn ich json.Marshal() oder jsonEncoder Kodierungsverfahren verwenden das Ergebnis:

[1 2 3 4] 

was nicht äquivalent ist wie die json_encode() Ergebnis in PHP und ich kann es nicht in PHP entschlüsseln.

Gibt es trotzdem ein zu [1, 2, 3, 4] kodiertes Ergebnis in go? (das hat "," Trennzeichen zwischen den einzelnen Elementen)

+5

Teilen Sie Ihren Go-Code. – abhink

+4

Wie @abhink gesagt hat, zeigen Sie uns Ihren nicht funktionierenden Go-Code, wenn Sie möchten, dass wir Ihnen helfen, den Fehler zu finden. Wir können Ihnen nicht helfen, wenn Sie uns den PHP-Code zeigen, der tatsächlich funktioniert. Auch hier ist Jsons Kodierungsbeispiel in Go https://play.golang.org/p/zsVSujWVLZ. – mkopriva

+0

@mkopriva besonderen Dank. in vielen gehen Beispiele, die ich gesehen habe, ist keine Hervorhebung bei der Verwendung von String (json.Marhsal (MarshalledResult)), in Ihrem Beispiel sah ich, dass bei der Verwendung von string() explizite Cast auf Marshalled Ergebnis die Komma Trennzeichen in Ergebnis erscheinen. Vielen Dank. das Problem gelöst – Mohammad

Antwort

-2

Wenn Sie json.Marshal verwenden, wird das Ergebnis [1 2 3 4] sein, aber wenn Sie Ihr Ergebnis als Zeichenfolge verwenden und an einen anderen Ort wie redis senden möchten oder als gültiger JSON auf dem Bildschirm ausgeben, sollten Sie Ihr Ergebnis explizit darstellen.

Hier sind die falschen und richtigen Codes:

package main 

import (
    "fmt" 
    "encoding/json" 
) 

func main() { 
    x := []int64{1, 2, 3, 4} 
    y, err := json.Marshal(x) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println(y) 
} 

und der richtige Code ist: Paket Haupt

import ( "FMT" "encoding/json" )

func main() { 
    x := []int64{1, 2, 3, 4} 
    y, err := json.Marshal(x) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println(string(y)) 
} 
+2

Sie scheinen den Zweck der Typkonvertierung in dem Beispiel missverstanden zu haben, das gibt ** nur ** zu sagen "fmt.Println", wie die resultierenden Bytes zu drucken. 'json.Marshal' gibt immer eine Scheibe von Bytes zurück und wenn Sie das direkt an' fmt.Println' übergeben, sehen Sie nur die Bytes, die den JSON darstellen. Wenn redis eine json-Zeichenkette benötigt, dann musst du die Bytes in eine Zeichenkette konvertieren, aber wenn redis json-Bytes benötigt, dann musst du das Ergebnis nicht von marshall konvertieren. https://play.golang.org/p/pJKzAUucQG – mkopriva

+0

Werfen Sie einen Blick auf diese https://play.golang.org/p/AFQNQkr1dm, Sie können sehen, dass die Kommas dort ohne die Notwendigkeit der Konvertierung sind. – mkopriva

+1

Ihr erstes Beispiel druckt definitiv nicht '[1 2 3 4]' – JimB