Как я могу типизировать мой 2d фрагмент строки в [] байт? - PullRequest
0 голосов
/ 23 января 2019

Я создал 2d срезы и заполнил их из базы данных бэкэнда, но так как json.Unmarshal принимает только [] байт в качестве первого параметра как я могу типизировать мой 2d срез в [] байт.

Вот пример кода для справки, поскольку я не могу поделиться внутренним кодом:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

//User sjd
type User struct {
    EmailList [][]string `json:"emailList"`
}

func listHandler(w http.ResponseWriter, r *http.Request) {
    reqBody, _ := ioutil.ReadAll(r.Body)
    var user User
    json.Unmarshal(reqBody, &user)
    el := user.EmailList 
    keys := make([][]string, 0)
    json.Unmarshal([]byte(el), &keys) //this line not working because []byte(el) not possible
    fmt.Println(keys)
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)
    w.Write([]byte(el))//this line not working because []byte(el) not possible
}

func main() {
    http.HandleFunc("/", listHandler)
    http.ListenAndServe(":8080", nil)
}

Пример запроса:

{
    "emailList": [
        [
            "akki@gmail.com",
            "bakki@gmail.com"
        ],
        [
            "lakki@gmail.com",
            "jakki@gmail.com"
        ]
    ]
}

1 Ответ

0 голосов
/ 23 января 2019

Unmarshal JSON как []byte до user.Marshal user.EmailList в JSON как []byte.Например,

package main

import (
    "encoding/json"
    "fmt"
    "os"
)

type User struct {
    EmailList [][]string `json:"emailList"`
}

func main() {
    // rBody, err := ioutil.ReadAll(r.Body)
    rBody := []byte(`
{
    "emailList": [
        [
            "akki@gmail.com",
            "bakki@gmail.com"
        ],
        [
            "lakki@gmail.com",
            "jakki@gmail.com"
        ]
    ]
}
    `)
    fmt.Println(string(rBody))

    var user User
    err := json.Unmarshal(rBody, &user)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
    fmt.Println(user.EmailList)

    wData, err := json.Marshal(user.EmailList) // wData is []byte
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        return
    }
    fmt.Println(wData) // wData is []byte
    fmt.Println(string(wData))
    // _, err = w.Write(wData)
}

Детская площадка: https://play.golang.org/p/S3HWiTqz--B

Выход:

{
    "emailList": [
        [
            "akki@gmail.com",
            "bakki@gmail.com"
        ],
        [
            "lakki@gmail.com",
            "jakki@gmail.com"
        ]
    ]
}

[[akki@gmail.com bakki@gmail.com] [lakki@gmail.com jakki@gmail.com]]
[91 91 34 97 107 107 105 64 103 109 97 105 108 46 99 111 109 34 44 34 98 97 107 107 105 64 103 109 97 105 108 46 99 111 109 34 93 44 91 34 108 97 107 107 105 64 103 109 97 105 108 46 99 111 109 34 44 34 106 97 107 107 105 64 103 109 97 105 108 46 99 111 109 34 93 93]
[["akki@gmail.com","bakki@gmail.com"],["lakki@gmail.com","jakki@gmail.com"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...