Hey there, myh code is that below now;
package main
import (
//"database/sql"
"encoding/json"
"net/http"
// "reflect"
"strings"
)
func ultimaposicao(w http.ResponseWriter, r *http.Request) {
urlqry := r.URL.Query()
JsonUltimaPosicao := ObjUltimaPosicao{}
//faz a validação da chave do rest
if !RestVerificaChave(urlqry.Get("chave")) {
JsonUltimaPosicao.Status.Cod = "-2"
JsonUltimaPosicao.Status.Msg = "Falha durante tentativa de autenticacao no REST! Credenciais invalidas."
json.NewEncoder(w).Encode(&JsonUltimaPosicao)
return
}
//faz a validação da chave do rest
Satelital := "0" //PADRAO GPRS, ADAPTACAO PARA VERSOES ANTIGAS DO APLICATIVO
if strings.TrimSpace(urlqry.Get("satelital")) != "" {
Satelital = urlqry.Get("satelital")
}
rows, err := db.Query("EXEC PRCATUALIZACOES @IDVEICULO=" + urlqry.Get("idveiculo") + ", @TAMANHOPAGINA=1, @NUMEROPAGINA=1, @SATELITAL=" + Satelital)
defer rows.Close()
if err != nil {
GeraLog(err.Error())
return
}
if rows.Next() {
columns, err := rows.ColumnTypes()
if err != nil {
GeraLog(err.Error())
return
}
values := make([]interface{}, len(columns))
object := map[string]interface{}{}
for i, column := range columns {
//object[column.Name()] = reflect.New(column.ScanType()).Interface()
//values[i] = object[column.Name()]
object[column.Name()] = new(GenericScanner)
values[i] = object[column.Name()]
}
err = rows.Scan(values...)
if err != nil {
GeraLog(err.Error())
return
}
JsonUltimaPosicao.Status.Cod = "1"
JsonUltimaPosicao.Status.Msg = "Sucesso."
JsonUltimaPosicao.Info = object
} else {
JsonUltimaPosicao.Status.Cod = "-3"
JsonUltimaPosicao.Status.Msg = "Nenhuma posicao ainda registrada para este alvo, ou o alvo informado e invalido."
}
json.NewEncoder(w).Encode(&JsonUltimaPosicao)
}
The custom scanner code;
package main
import "time"
type GenericScanner struct {
valid bool
value interface{}
}
func (scanner *GenericScanner) getBytes(src interface{}) []byte {
if a, ok := src.([]uint8); ok {
return a
}
return nil
}
func (scanner *GenericScanner) Scan(src interface{}) error {
switch src.(type) {
case int64:
if value, ok := src.(int64); ok {
scanner.value = value
scanner.valid = true
}
case float64:
if value, ok := src.(float64); ok {
scanner.value = value
scanner.valid = true
}
case bool:
if value, ok := src.(bool); ok {
scanner.value = value
scanner.valid = true
}
case string:
value := scanner.getBytes(src)
scanner.value = string(value)
scanner.valid = true
case []byte:
value := scanner.getBytes(src)
scanner.value = value
scanner.valid = true
case time.Time:
if value, ok := src.(time.Time); ok {
scanner.value = value
scanner.valid = true
}
case nil:
scanner.value = nil
scanner.valid = true
}
return nil
}
I’ve found on my searchs I gotta implement a custom scanner, I did like above and my json now is worst than before, below you have it;
{"STATUS":{"COD":"1","MSG":"Sucesso."},"INFO":{"ALTITUDE":{},"ANTIFURTO":{},"APELIDO":{},"BATERIACARREGANDO":{},"BLOQUEADO":{},"DATAHORAEXIB":{},"DATAHORAGPS":{},"DATAHORAORIGINAL":{},"DATAHORASERVIDOR":{},"DIRECAO":{},"ENTRADA1LABEL":{},"ENTRADA1SHOW":{},"ENTRADA1VALOFF":{},"ENTRADA1VALON":{},"ENTRADA2LABEL":{},"ENTRADA2SHOW":{},"ENTRADA2VALOFF":{},"ENTRADA2VALON":{},"ENTRADA3LABEL":{},"ENTRADA3SHOW":{},"ENTRADA3VALOFF":{},"ENTRADA3VALON":{},"ENTRADA4LABEL":{},"ENTRADA4SHOW":{},"ENTRADA4VALOFF":{},"ENTRADA4VALON":{},"ENTRADAS1":{},"ENTRADAS2":{},"ENTRADAS3":{},"ENTRADAS4":{},"FALHAALIMENTACAOPRINCIPAL":{},"FALHABATERIAINTERNA":{},"HODOMETRO":{},"HORIMETRO":{},"HORIMETROFORMATADO":{},"ID":{},"IDCLIENTE":{},"IDENTIFICACAOVEICULO":{},"IDMODULO":{},"IDMOTORISTA":{},"IDVEICULO":{},"IGNICAO":{},"INDICEPOSICAOMXT":{},"LATITUDE":{},"LONGITUDE":{},"MODELO":{},"MOTORISTA":{},"MOTORLIGADO":{},"MOVENDO":{},"NIVELSINALGSM":{},"NUMSATELITES":{},"PANICO":{},"PLACA":{},"RPM":{},"SAIDA1HABILITAR":{},"SAIDA1LABEL":{},"SAIDA1SHOW":{},"SAIDA1VALOFF":{},"SAIDA1VALON":{},"SAIDA2HABILITAR":{},"SAIDA2LABEL":{},"SAIDA2SHOW":{},"SAIDA2VALOFF":{},"SAIDA2VALON":{},"SAIDA3HABILITAR":{},"SAIDA3LABEL":{},"SAIDA3SHOW":{},"SAIDA3VALOFF":{},"SAIDA3VALON":{},"SAIDA4HABILITAR":{},"SAIDA4LABEL":{},"SAIDA4SHOW":{},"SAIDA4VALOFF":{},"SAIDA4VALON":{},"SAIDAS1":{},"SAIDAS2":{},"SAIDAS3":{},"SAIDAS4":{},"SATELITAL":{},"SERIEMODULO":{},"SERIESATELITAL":{},"STATUSGPS":{},"STATUSPOSICAO":{},"TENSAO":{},"TIPOMSG":{},"TIPORASTREADOR":{},"TIPOVEICULO":{},"TIPOVEICULODESCRICAO":{},"VELOCIDADE":{},"VELOCIDADEMAXIMAEXCEDIDA":{}}}
I would really appreciate if anyone could help me with that, I just searched whole Google, but nothing.
Tnx.