2017-07-19 1 views
-1

Ich habe, aus welchem ​​Grund auch immer, beim Versuch, eine einfache Rest-API in Go mit MySQL-Speicher zu bauen, fügte ein zweites json.Marshal, die Doppel-Encoding ist und Ergebnisse mit Escape-Anführungszeichen und eine solche. Ich könnte die Zitate streichen, aber ich denke, ich sollte nicht zwei json.Marshal Dinge an erster Stelle passiert.Korrekt entfernen zweiten Json.Marshal in Go

Das Problem ist zweifach - 1) das ist richtig zu entfernen (lehnt sich an die erste, weil "Ergebnis" sollte das größere Array sein) und 2) wie man den Code nach dem Entfernen funktioniert? Ich kann nicht einfach den ersten entfernen, da ich anfange, alle Arten von Fehlern zu begegnen. Hier sind die relevanten Teile des Codes:

type Volume struct { 
    Id int 
    Name string 
    Description string 
} 

... vorwärts springen ....

var result = make([]string,1000) 
switch request.Method { 
    case "GET": 

     name := request.URL.Query().Get("name") 

     stmt, err := db.Prepare("select id, name, description from idm_assets.VOLUMES where name = ?") 
      if err != nil{ 
       fmt.Print(err); 
      } 

      rows, err := stmt.Query(name) 

      if err != nil { 
       fmt.Print(err) 
      } 

      i := 0 

      for rows.Next() { 
       var name string 
       var id int 
       var description string 
       err = rows.Scan(&id, &name, &description) 
       if err != nil { 
        fmt.Println("Error scanning: " + err.Error()) 
         return 
       } 
       volume := &Volume{Id: id,Name:name,Description: description} 

Hier ist der erste json.Marshal ...

   b, err := json.Marshal(volume) 
        fmt.Println(b) 
       if err != nil { 
        fmt.Println(err) 
        return 
       } 
       result[i] = fmt.Sprintf("%s", string(b)) 
       i++ 
      } 
     result = result[:i] 

. ..Spring andere Fälle für PUT, DELETE, Etc. Zum zweiten json.Marshal ...

default: 
    } 
json, err := json.Marshal(result) 
if err != nil { 
    fmt.Println(err) 
    return 
} 
fmt.Fprintf(response,"'%v'\n",string(json)) 

Antwort

2

Schalten result in ein Array von *Volume

result := []*Volume{} 

und dann neue Volume Datensätze anhängen:

result = append(result, &Volume{Id: id,Name:name,Description: description}) 

und in der Endanwendung Marshal(result) das JSON Ergebnis zu erhalten.

+0

Vielen Dank. Das brachte mich definitiv in die richtige Richtung. Ich hatte zuvor versucht, mich an die Scheibe anzuhängen, aber ich tat es falsch und konnte den Fehler erst sehen, wenn ich mit dieser Scheibe verglichen habe. Vielen Dank! – user1514992

Verwandte Themen