Golang json解析 - Go语言中文社区

Golang json解析


       对于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 ,运行截图是这样的:
   

   这说明:当你接收的 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`
    }

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

   这样就可以解析出来了

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




版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/impressionw/article/details/69267452
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 19:41:57
  • 阅读 ( 670 )
  • 分类:前端

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢