Golang Go语言中请教一个有关 gin 返回包含未知属性的嵌套 JSON 的问题
Golang Go语言中请教一个有关 gin 返回包含未知属性的嵌套 JSON 的问题
如题,现在我们要返回这样的一个 JSON:
c.JSON( http.StatusOK, gin.H{
"message": "ok",
"data": data.Data,
})
其中 data.Data 是一个 JSON 字符串,例如:"{\r\n \"name\": \"smzddddddddddddddd\",\r\n \"age\": 66666666666\r\n}"
现在我们得到的返回是这样的:
{
"data": "{\r\n \"name\": \"smzddddddddddddddd\",\r\n \"age\": 66666666666\r\n}",
"message": "ok"
}
而我想得到这样的:
{
"data": {
"name":"smzddddddddddddddd",
"age":66666666666
},
"message": "ok"
}
难点在于 data 的属性是完全未知的,我已经尝试搜索过 gin return nested json
相关的信息,但是好像都需要绑定到一个结构体,但是属性完全未知的情况下要怎么搞呢?
更多关于Golang Go语言中请教一个有关 gin 返回包含未知属性的嵌套 JSON 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
用 map
更多关于Golang Go语言中请教一个有关 gin 返回包含未知属性的嵌套 JSON 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
data json.RawMessage
将字符串转成 map
s := “{\r\n “name”: “smzddddddddddddddd”,\r\n “age”: 66666666666\r\n}”
var m map[string]interface{}
if err:=json.Unmarshal([]byte(s),&m);err!=nil{
fmt.Println(err.Error())
}
fmt.Println(m)
谢谢大家,贴一下解决方案,供参考:go<br> data, err := Query(path)<br> var jsonData map[string]interface{}<br> if err == nil {<br> message := "ok"<br> if data != nil {<br> if e := json.Unmarshal([]byte(data.Data), &jsonData); e != nil {<br> message = e.Error()<br> }<br> } else {<br> message = "data is nil but err is not nil"<br> }<br> c.JSON( http.StatusOK, gin.H{<br> "message": message,<br> "data": jsonData,<br> })<br> } else {<br> c.JSON( http.StatusInternalServerError, gin.H{<br> "message": err.Error(),<br> })<br> }<br>
用 json.RawMessage 就好了转 map 是浪费go<br>c.JSON( http.StatusOK, gin.H{<br> "message": "ok",<br> "data": json.RawMessage(data.Data),<br>})<br>
先把你的 data.Data 序列化成 map 然后再…
data.Data 已经是字符串了,你就用 c.string 返回啊,加个返回头。为啥还要反序列化??
同意楼上,直接构造个 json 字符串返回就好了,不用转来转去
对,就是楼上说的那样
楼上正解