golang golang编码/ json

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang golang编码/ json相关的知识,希望对你有一定的参考价值。

 1 package main
 2 
 3 import (
 4     "bytes"
 5     "encoding/json"
 6     "fmt"
 7 )
 8 
 9 type ColorGroup struct {
10     ID     int
11     Name   string
12     Colors []string
13 }
14 
15 func main() {
16 
17     //---------------Marshal
18     group := ColorGroup{
19         ID:     1,
20         Name:   "Reds",
21         Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
22     }
23     b, err := json.Marshal(group)
24     if err != nil {
25         fmt.Println("error:", err)
26     }
27     //os.Stdout.Write(b)
28     fmt.Println(string(b[:]))
29 
30     //---------------Unmarshal
31     var jsonBlob = []byte(`[
32             {"ID":1,"Name":"Reds1","Colors":["Crimson","Red1","Ruby1","Maroon1"]},
33             {"ID":2,"Name":"Reds2","Colors":["Crimson","Red2","Ruby2","Maroon2"]},
34             {"ID":3,"Name":"Reds3","Colors":["Crimson","Red3","Ruby3","Maroon3"]}
35         ]`)
36 
37     var animals []ColorGroup
38     error := json.Unmarshal(jsonBlob, &animals)
39     if error != nil {
40         fmt.Println("error:", error)
41     }
42 
43     //fmt.Printf("%+v", animals)
44     //fmt.Println(animals)
45     for i, x := range animals {
46         fmt.Println(i, x)
47 
48     }
49     //---------------Indent
50     dst := new(bytes.Buffer)
51     json.Indent(dst, jsonBlob, "##", "**")
52     fmt.Println(dst)
53 }

Golang✔️走进 Go 语言✔️ 第二十二课 json & 文件读写

【Golang】✔️走进 Go 语言✔️ 第二十二课 json & 文件读写

概述

Golang 是一个跨平台的新生编程语言. 今天小白就带大家一起携手走进 Golang 的世界. (第 22 课)

json

json (JavaScript Object Notation) 是一种轻量级的数据交换格式.

编码

格式:

json.Marshal(v interface{})

例子:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {

	type person struct {
		Name string
		Job string
	}

	Bob := person{
		"Bob",
		"掏粪工",
	}

	// 编码
	b, error := json.Marshal(Bob)

	if error != nil {
		fmt.Println(error)
	}

	// 调试输出
	fmt.Println(b)
	fmt.Println(string(b))

}

输出结果:

[123 34 78 97 109 101 34 58 34 66 111 98 34 44 34 74 111 98 34 58 34 230 142 143 231 178 170 229 183 165 34 125]
{"Name":"Bob","Job":"掏粪工"}

解码

package main

import (
	"encoding/json"
	"fmt"
)

func main() {

	type person struct {
		Name string
		Job string
	}

	// 转换成json
	var jsonbytes = []byte(`{"Name": "bob","Job": "dancer"}`)
	fmt.Println(jsonbytes)

	// 定义变量p
	var p person
	
	// 解码
	error := json.Unmarshal(jsonbytes, &p)
	if error != nil {
		fmt.Println(error)
	}
	
	// 调试输出
	fmt.Printf("%+v", p)

}

输出结果:

[123 34 78 97 109 101 34 58 32 34 98 111 98 34 44 34 74 111 98 34 58 32 34 100 97 110 99 101 114 34 125]
{Name:bob Job:dancer}

文件读写

文件读写是常见的操作. Go 语言提供了多种文本操作的支持.

文件读取

格式:

ReadAll(r io.Reader) ([]byte, error)

整个文件读取:

package main

import (
	"fmt"
	"io/ioutil"
	"os"
)

func main() {

	// 打开文件
	file, err := os.Open("C:/Users/Windows/Desktop/project2/read_write/read/1.txt")
	fmt.Println(file, err)
    
    // 延时关闭
    defer file.Close()

	// 读取整个文件
	read_bytes, err := ioutil.ReadAll(file)

	// 调试输出
	fmt.Println(string(read_bytes))

}

输出结果:

&{0xc0000da780} <nil>
A
B
C
D

按字节读取文件 (panic 用于抛出错误):

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {

	// 打开文件
	file, err := os.Open("C:/Users/Windows/Desktop/project2/read_write/read/1.txt")

	if err != nil {
		panic(err)
	}

	// 延时关闭
	defer file.Close()

	// 创建byte数组用于存放数据
	result := make([]byte, 0)

	// 创建缓冲区
	buffer := make([]byte, 1024)
	for {
		// 读取1kb
		n, err := file.Read(buffer)

		// 错误处理
		if err != nil && err != io.EOF {
			panic(err)
		}

		// 跳出循环
		if 0 == n {
			break
		}

		// append (加上...可以追加数组, 否则只能追加元素)
		result = append(result, buffer[:n]...)
	}

	// 调试输出最终结果
	fmt.Println(string(result))

}

写入文件

格式:

file.Write(f *File) Write(b []byte)

返回值:

  • nums: 写入的字节个数
  • err: 错误

例子:

package main

import (
	"fmt"
	"os"
)

func main() {

	// 定义字符串, 并转换成字节数组
	input := []byte("Hello World")

	// 穿件文件
	file, err := os.Create("1.txt")

	if err != nil {
		panic(err)
	}

	// 延时关闭
	defer file.Close()

	// 写入文件
	nums, err := file.Write(input)

	if err != nil {
		panic(err)
	}

	// 调试输出写入的字节数
	fmt.Println("字节数:", nums)

}

输出结果:

字节数: 11

以上是关于golang golang编码/ json的主要内容,如果未能解决你的问题,请参考以下文章

golang-Json编码解码

golang json 编码解码

Golang 处理 Json:编码

golang json 编码解码

#yyds干货盘点#Golang 编码和解析Json

golang 使用Go的net / http包对JSON进行编码和解码