在Go中将类似JSON的字符串转换为struct

问题描述

我有一个类似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)
}

如何在SSM中存储类似JSON的值,然后将其解组?还是有一种将字符串转换为JSON然后转换为结构的方法

解决方法

我发现,当我有一个简单的JSON作为字符串时,例如{“ key1”:“ value1”,“ key2”:“ value2”} 我可以简单地做到这一点

您当前的代码无效。您的struct字段需要公开,以便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” key1“:” value1“,\ n” key2“:” value2“ \ 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.Key2)
}