1).返回字段数等于struct数,见代码:
package main
import (
"encoding/json"
"fmt"
"strings"
)
type GetResponse struct {
Message string `json:message`
Success int `json:success`
Vild string `json:vild`
Core string `json:core`
}
func main() {
sss := `callback_1491381399454({"message": "success", "success": 1, "vild": "bc48a84c5b0175efb6a59b2036f76cd8", "core": "3"})`
k := strings.Index(sss, "{") // 找第一个‘{’的位置
l := strings.Index(sss, ")") // 找第一个‘)’的位置
if k == -1 || l == -1 { // 是否查找成功
return
}
sbss := sss[k:l]
fmt.Printf("sss = ")
fmt.Println(sss)
fmt.Printf("sbss = ")
fmt.Println(sbss)
var geres GetResponse
err := json.Unmarshal([]byte(sbss), &geres)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Printf("geres = ")
fmt.Println(geres)
fmt.Printf("geres.Vild = %s", geres.Vild)
}
2).返回字段数小于定义struct数, 代码如下:
package main
import (
"encoding/json"
"fmt"
"strings"
)
type GetResponse struct {
Message string `json:message`
Success int `json:success`
Vild string `json:vild`
}
func main() {
sss := `callback_1491381399454({"message": "success", "success": 1, "vild": "bc48a84c5b0175efb6a59b2036f76cd8", "core": "3"})`
k := strings.Index(sss, "{") // 找第一个‘{’的位置
l := strings.Index(sss, ")") // 找第一个‘)’的位置
if k == -1 || l == -1 { // 是否查找成功
return
}
sbss := sss[k:l]
fmt.Printf("sss = ")
fmt.Println(sss)
fmt.Printf("sbss = ")
fmt.Println(sbss)
var geres GetResponse
err := json.Unmarshal([]byte(sbss), &geres)
if err != nil {
fmt.Println(err.Error())
return
}
fmt.Printf("geres = ")
fmt.Println(geres)
fmt.Printf("geres.Vild = %s", geres.Vild)
}
说明:当你接收的 json格式文本字段比定义的结构体字段多的时候,也可以解析成功,只是不能访问多出的字段
本文参考:
https://www.yuque.com/docs/share/ff77c828-6d88-4967-8ec1-b42d9e19e18a