Golang中JSON数据无法显示的问题如何解决
Golang中JSON数据无法显示的问题如何解决
你好,
当我从以下函数中获取数据时,我可以使用 fmt.Println 将其打印出来,但在浏览器和 Postman 中,我得到的是以下内容:
[
{},
{},
{}
]
函数如下。
func sendResponse(w http.ResponseWriter, statusCode int, payload interface{}){
fmt.Println("Payload Unmarshal ",payload)
// 打印这个 >> Payload Unmarshal [{1 Java} {2 python} {3 golang}]
response, _ := json.Marshal(payload)
w.Header().Set("Content-Type","application/json; charset=utf-8")
w.WriteHeader(statusCode)
fmt.Println("From sendResponse app ",response)
// 打印这个 >> From sendResponse app [91 123 125 44 123 125 44 123 125 93]
w.Write(response)
}
有人能在这方面帮助我吗?代码中哪里出错了?
更多关于Golang中JSON数据无法显示的问题如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html
不,情况并非如此(无效的JSON)!
更多关于Golang中JSON数据无法显示的问题如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
万分感谢,现在可以正常工作了! 我之前没有注意到这一点 :frowning:
再次感谢 :slight_smile:
aab:
[{1 Java} {2 python} {3 golang}]
无效的JSON!??
错误:第1行解析错误:[{1 Java} {2 python} { --^ 期望是 ‘STRING’ 或 ‘}’,但得到了 ‘NUMBER’
不需要运行它。已经找到了问题:
type language struct {
id int `json:"id"`
name string `json:"name"`
}
这些字段没有导出。将其改为:
type language struct {
ID int `json:"id"`
Name string `json:"name"`
}
感谢您的回复和考虑。我正在处理的代码位于此处。
为了运行应用程序,您需要做的就是运行 docker-compose up 并访问 localhost:8080/languages 来获取所有语言信息。
感谢您的回复,但这并没有帮助 😵
fmt.Println("From sendResponse app ",response)
// Payload Unmarshal [{1 Java} {2 python} {3 golang}]
fmt.Println("From sendResponse app ", string(response))
// From sendResponse app [{},{},{}]
payload 的类型是什么?我怀疑你的问题来自于这里未显示的代码。考虑以下示例:
package main
import (
"encoding/json"
"fmt"
)
type Payload struct {
ID int
Value string
}
func main() {
payload := []Payload{{1, "Java"}, {2, "python"}, {3, "golang"}}
fmt.Println(payload)
response, err := json.Marshal(payload)
if err != nil {
fmt.Println("error:", err)
}
fmt.Println(string(response))
}
… 其输出为:
[{1 Java} {2 python} {3 golang}]
[{"ID":1,"Value":"Java"},{"ID":2,"Value":"python"},{"ID":3,"Value":"golang"}]
你可以在 Go Playground 中亲自运行它。如果你能调整此代码以提供一个可复现的示例,这里或许有人能帮助你。
问题出在结构体的字段没有导出(首字母大写)。JSON 包只能访问导出的字段。
你的结构体字段可能是小写,例如:
type Item struct {
id int
name string
}
应该改为:
type Item struct {
ID int `json:"id"`
Name string `json:"name"`
}
完整示例:
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type Item struct {
ID int `json:"id"`
Name string `json:"name"`
}
func main() {
http.HandleFunc("/data", handler)
http.ListenAndServe(":8080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
data := []Item{
{ID: 1, Name: "Java"},
{ID: 2, Name: "Python"},
{ID: 3, Name: "Golang"},
}
sendResponse(w, http.StatusOK, data)
}
func sendResponse(w http.ResponseWriter, statusCode int, payload interface{}) {
response, _ := json.Marshal(payload)
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(statusCode)
w.Write(response)
}
现在浏览器和Postman会显示:
[
{"id": 1, "name": "Java"},
{"id": 2, "name": "Python"},
{"id": 3, "name": "Golang"}
]


