Golang Json數據處理方法


json數據處理方法一

我們可以直接將json數據映射到預定義好的結構體中,但是必須要確保json的字段和結構體必須要一致
假設我們有如下data.json文件:

{
	"group":"1012",
	"info":[
	  {
			"name":"Jack",
			"hobby":"basketball"
	   },
	   {
			"name":"Xander",
			"hobby":"running"
		},
		{
			"name":"Eric",
			"hobby":"running"
		}

	]
}

代碼示例:

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
)

type (
	studentInfo struct {
		Name  string `json:"name"`
		Hobby string `json:"hobby"`
	}

	class struct {
		Group string `json:"group"`
		Info  []studentInfo `json:"info"`
	}
)

func main(){
	var data class

	// 讀取json文件內容 返回字節切片
	bytes,_ := ioutil.ReadFile("data.json")

	// 將字節切片映射到指定結構體上
	json.Unmarshal(bytes,&data)

	// 打印對象結構
	fmt.Println(data)

	// 循環所有學生的信息
	for idx,val := range data.Info{
        fmt.Printf("index: %v 學生名:%v,愛好: %v\n",idx,val.Name,val.Hobby)
	}

	// 更改值
	data.Group = "1013"
}

運行該程序后,控制台打印如下信息:

{1012 [{Jack basketball} {Xander running} {Eric running}]}
index: 0 學生名:Jack,愛好: basketball
index: 1 學生名:Xander,愛好: running
index: 2 學生名:Eric,愛好: running

json數據處理方式二

但是有的時候,如果JSON數據的定義過於復雜化,我們就很需要一種靈活的方式來處理,在這種情況下,可以將JSON數據映射到一個map結構中
假設我們有如下data.json文件:

[
	"class":{
		"name":"1013",
		"teacher":"Mora"
	},
	"info":[
	  {
			"name":"Jack",
			"hobby":"basketball"
	   },
	   {
			"name":"Xander",
			"hobby":"running"
		},
		{
			"name":"Eric",
			"hobby":"running"
		}

	]
]

代碼示例:

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
)

func main(){

	// 讀取json文件內容 返回字節切片
	bytes,_ := ioutil.ReadFile("data.json")

	// 將字節切片映射到指定map上
	// key:string類型,value:interface{}  類型能存任何數據類型
	var jsonObj map[string]interface{}
	json.Unmarshal(bytes,&jsonObj)

	// 將key:info 轉換為[]interface{}類型(必須先轉換成該類型才能實現range操作)
	stu := jsonObj["info"].([]interface{})

	// 打印對象結構
	fmt.Println(jsonObj)

	// 打印所有學生信息
	for idx,item := range stu {
		// 同樣,遍歷的時候也需要做轉換
		x := item.(map[string]interface{})
		// 更改名字
		//x["name"] = string("xxx")
		fmt.Println(idx,x["name"])
	}

}

運行該程序后,控制台打印如下信息:

map[group:1012 info:[map[hobby:basketball name:Jack] map[hobby:running name:Xander] map[hobby:running name:Eric]]]

0 Jack
1 Xander
2 Eric


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM