Ես աշխատում եմ փոքր սերվեր-հաճախորդ նախագծի վրա, որը հիմնված է JSON հաղորդակցության վրա: Բայց ես բախվում եմ խնդիրների. Ես փորձում եմ պատասխանի կառուցվածք ստեղծել ընդհանուր հաղորդագրության մարմնի հետ: Սա նշանակում է, որ ես ունեմ քարտեզ՝ որպես տող բանալին, և որպես արժեք՝ json հում հաղորդագրություն: Վերջում հաղորդագրության մարմինը պետք է աշխատի ցանկացած տեսակի համար (տողեր, ամբողջ թվեր, զանգվածներ)
package main
import (
"encoding/json"
"fmt"
)
type ServerResponse struct {
Code int `json:"code" bson:"code"`
Type string `json:"type" bson:"type"`
Body map[string]json.RawMessage `json:"body" bson:"body"`
}
func NewServerResponse() *ServerResponse {
return &ServerResponse{Body: make(map[string]json.RawMessage)}
}
func main(){
serverResponse := NewServerResponse()
serverResponse.Code = 100
serverResponse.Type = "molly"
serverResponse.Body["string"] = json.RawMessage("getIt")
serverResponse.Body["integer"] = json.RawMessage{200}
serverResponse.Body["array"] = json.RawMessage(`["a", "b", "c"]`)
if d, err := json.Marshal(&serverResponse); err != nil{
fmt.Println("Error " + err.Error())
}else{
fmt.Println(string(d))
}
}
Բայց արդյունքը հետևյալն է.
{
"code":100,
"type":"molly",
"body": {
"array":"WyJhIiwgImIiLCAiYyJd",
"integer":"yA==",
"string":"Z2V0SXQ="
}
}
Թվում է, թե արժեքները Base64 կոդավորված են և կրկնակի չակերտների ներսում: Tihs-ը պետք է լինի ակնկալվող արդյունքը
{
"code":100,
"type":"molly",
"body": {
"array":["a", "b", "c"],
"integer":200,
"string":"getIt"
}
}
Սա նույնիսկ հնարավո՞ր է: Թե՞ յուրաքանչյուր պատասխանի համար պետք է գրեմ կոնկրետ կառուցվածքի տեսակ: