golang解析php的json解析,Golang json解析-Go语言中文社区

对于json解析的一点小坑...

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 数  代码是这样的

结构体定义:

type GetResponse struct {

Message string `json:message`

Success int    `json:success`

Vild    string `json:vild`

}

要处理的json格式文本是这样的:

sss11 := `callback_1491381399454({"message": "success", "success": 1,

"vild": "bc48a84c5b0175efb6a59b2036f76cd8","core": "3"})`

这样要处理的文本 就多了字段core,运行截图是这样的:

b77a3d31f9d8e9c70b77c3fd26e88e4c.png

这说明:当你接收的 json格式文本字段比定义的结构体字段多的时候,也可以解析成功,只是不能访问多出的字段(例如:core),你可以这样尝试:

fmt.Printf("geres.Core = %s", geres.Core)  //这是错误的,结构体中没有,无法访问到

3)复杂的json格式,怎么解析,格式是这样子的

{"success":0,"sss":55554,"message":"forbidden","static_value":{

"sbb":"6",

"arr":[

"static.geetest.com/",

"dn-staticdown.qbox.me/"

]

}}

可以这样定义 解析json的struct:

type Static_value struct {

Sbb string   `json:sbb`

Arr []string `json:arr`

}

type GetResponseTest struct {

Message         string       `json:message`

Sss             int          `json:sss`

Success         int          `json:success`

Static_value Static_value `json:static_value`

}

这样也可以正常的解析出来,是这个效果的:

425fcc0748ea998a066b0740ca68af07.png

这样就可以解析出来了

注意,struct 的字段必须是 首字母大写,不然无法导出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值