Преобразование строки в стиле JSON в структуру в Go
У меня есть JSON вроде:
{
"key1": "value1",
"key2": "value2"
}
Я сохраняю это как строковый тип в AWS SSM. Он возвращает строку, которая выглядит так:
"{\n\"key1\": \"value1\",\n\"key2\": \"value2\"\n}"
Я понял, что когда у меня есть простой JSON в виде строки вроде {"key1": "value1", "key2": "value2"}
Я могу просто сделать это
package main
import (
"fmt"
"encoding/json"
)
type Request struct {
key1 string `json:"key1"`
key2 string `json:"key2"`
}
func main() {
s := `{"key1": "value1","key2": "testing"}`
data := Request{}
json.Unmarshal([]byte(s), &data)
fmt.Printf("key1: %s \n", data.key1)
fmt.Printf("key2: %s", data.key2)
}
Как сохранить значение, подобное JSON, в SSM, а затем демаршалировать его на ходу? Или есть способ преобразовать строку в JSON, а затем структурировать?
0 ответов
Я понял, что когда у меня есть простой JSON в виде строки типа {"key1": "value1", "key2": "value2"}, я могу просто сделать это
Ваш текущий код не будет работать. Поля вашей структуры должны быть общедоступными, чтобы пакет json мог получить к ним доступ.
package main
import (
"fmt"
"encoding/json"
)
type Request struct {
Key1 string `json:"key1"`
Key2 string `json:"key2"`
}
func main() {
s := `{"key1": "value1","key2": "testing"}`
data := Request{}
json.Unmarshal([]byte(s), &data)
fmt.Printf("key1: %s \n", data.Key1)
fmt.Printf("key2: %s", data.Key2)
}
Я сохраняю это как строковый тип в AWS SSM. Он возвращает строку вида: "{\n" ключ1 ":" значение1",\n" ключ2 ":" значение2"\n}"
Не уверен в AWS SSM, но я предлагаю вам посмотреть, как вы публикуете и извлекаете данные. Никакие внешние службы не должны изменять ваши данные.
Но если вы не можете, вы можете отменить экранирование перед демаршингом.
package main
import (
"encoding/json"
"fmt"
"strconv"
)
type Request struct {
Key1 string `json:"key1"`
Key2 string `json:"key2"`
}
func main() {
s := `"{\n\"key1\": \"value1\",\n\"key2\": \"value2\"\n}"`
s, _ = strconv.Unquote(string(s))
data := Request{}
json.Unmarshal([]byte(s), &data)
fmt.Printf("key1: %s \n", data.Key1)
fmt.Printf("key2: %s", data.Key2)
}