Удаление escape-персонажей после Marshalling - PullRequest
0 голосов
/ 20 ноября 2018

В приведенном выше коде я пытаюсь преобразовать мой ключ в байтовый массив через Marshal.Хотя мне это удается, когда я вижу строку Marshalled, я вижу \ escape-символ перед моими ключами json.Можете ли вы помочь мне удалить это?

 func GetBytes(key interface{}) ([]byte, error) {

    b, err := json.Marshal(key)
    if err != nil {
            return nil, err
    }

    log.Println("%%%%%%%%%%")
    log.Printf("%+v\n", key)
    log.Println("##########")
    log.Println(string(b));

    return b, nil
}

Токовый выход:

%%%%%%%%%%
{"entityId":5010740929,"eventTime":1542706233458}
##########
"{\"entityId\":5010740929,\"eventTime\":1542706233458}"

1 Ответ

0 голосов
/ 20 ноября 2018

Я думаю, вы отправляете строку как key в func GetBytes(key interface{}) ([]byte, error).Вот почему вы видите побег персонажей.

package main

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


func f(key interface{}) {
    json, err := json.Marshal(key)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(json))
}

func main() {

    data := map[string]interface{}{
        "A": 1,
        "B": 2,
    }

    f(data)

    json, err := json.Marshal(data)
    if err != nil {
        log.Fatal(err)
    }
    f(string(json))
}

Вывод:

{"A":1,"B":2}
"{\"A\":1,\"B\":2}"

Перейти на игровую площадку: https://play.golang.org/p/iF1ckvZ9cQC

В этом случае вы можете использовать Unquote, чтобы удалить кавычку и экранирующий символ:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "strconv"
)


func f(key interface{}) {
    json, err := json.Marshal(key)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(json))

    st, err := strconv.Unquote(string(json))
    fmt.Println(st)

}

func main() {

    data := map[string]interface{}{
        "A": 1,
        "B": 2,
    }

    json, err := json.Marshal(data)
    if err != nil {
        log.Fatal(err)
    }
    f(string(json))
}

Выход:

"{\"A\":1,\"B\":2}"
{"A":1,"B":2}

Перейти на игровую площадку: https://play.golang.org/p/aoTEQtJslTs

...