首页 > 其他分享 >第九章:json操作

第九章:json操作

时间:2023-04-03 20:55:08浏览次数:30  
标签:animals string err 第九章 fmt json Println 操作

第十章 json操作

目录

一、Marshal 序列化

package main

import (
	"encoding/json"
	"fmt"
)
type Animal struct {
	Name  string `json:"name"`
	Order string `json:"order"`
}
func main() {
	var animals []Animal
	animals = append(animals, Animal{Name: "Platypus", Order: "Monotremata"})
	animals = append(animals, Animal{Name: "Quoll", Order: "Dasyuromorphia"})

	jsonStr, err := json.Marshal(animals)  // 也就是将可以转化成json的数据,进行json转换
	if err != nil {
		fmt.Println("error:", err)
	}

	fmt.Println(string(jsonStr))  // [{"name":"Platypus","order":"Monotremata"},{"name":"Quoll","order":"Dasyuromorphia"}]
}

不写tag也可以,使用tag起一个别名也好⛱️。

二、Unmarshal 反序列化

1 已知数据解析

package main

import (
    "encoding/json"
    "fmt"
)
type Animal struct {
    Name  string
    Order string
}
func main() {
    var jsonBlob = []byte(`[
        {"Name": "Platypus", "Order": "Monotremata"},
        {"Name": "Quoll",    "Order": "Dasyuromorphia"}
    ]`)

    var animals []Animal
    err := json.Unmarshal(jsonBlob, &animals)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Printf("%+v", animals)
}

2 未知数据解析

var f interface{}
b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)

json.Unmarshal(b, &f)

for k, v := range f.(map[string]interface{}) {
    switch vv := v.(type) {
    case string:
        fmt.Println(k, "is string", vv)
    case int:
        fmt.Println(k, "is int ", vv)
    case float64:
        fmt.Println(k, "is float64 ", vv)
    case []interface{}:
        fmt.Println(k, "is array:")
        for i, j := range vv {
            fmt.Println(i, j)
        }
    }
}

3 json测试

package main

import (
	"encoding/json"
	"fmt"
)

type Base struct {
	Name  string   `json:"name"`
	Age   int      `json:"age"`
	Hobby []string `json:"hobby"`
}

type Person struct {
	BaseInfo Base
	ID       string
}

func main() {
	person := Person{BaseInfo: Base{"yangyi", 18, []string{"sing", "song"}}, ID: "123456789"}
	// 1 转化成json字符串
	jsonStr, err := json.Marshal(person)
	if err != nil {
		fmt.Println("json转换成功...")
	}
	fmt.Println(string(jsonStr))  // {"BaseInfo":{"Name":"yangyi","Age":18,"Hobby":["sing","song"]},"ID":"123456789"}

	// 2 json字符串反解析
	var person1 Person
	err = json.Unmarshal(jsonStr, &person1)
	if err != nil {
		fmt.Println("json字符串解析失败...")
	}
	fmt.Printf("%T\n", person1)  // main.Person
	fmt.Println(person1.BaseInfo.Hobby)  // [sing song]
}

标签:animals,string,err,第九章,fmt,json,Println,操作
From: https://www.cnblogs.com/yangyi215/p/17284393.html

相关文章

  • LINUX 放开端口,防火墙操作
    防火墙操作:查看防火墙状态systemctlstatusfirewalld、firewall-cmd--state暂时关闭防火墙systemctlstopfirewalld永久关闭防火墙(慎用)systemctldisablefirewalld开启防火墙systemctlstartfirewalld开放指定端口firewall-cmd--zone=public--add-port=8080/tcp--perman......
  • 从零开始USRP 02 一些基本的GNU Radio操作
    继续学习:https://blog.csdn.net/YOUNGAAAAA/article/details/128098154我们可以先简单创建一个USRP图:  但是这个图目前是跑不了的,因为:RuntimeError:LookupError:KeyError:Nodevicesfoundfor----->EmptyDeviceAddress>>>Done(returncode1)这里我暂时先不......
  • Markdown基础语法与快捷操作
    Markdown基础语法与快捷操作0.介绍Markdown是一种轻量级标记语言,排版语法简洁。1.标题语法创建标题,只需要在其前面添加'#'号即可。#的数量代表其级数,如'###'表示的是创建一个三级标题。现在,我们让'Markdown使用方法'成为一个一级标题。让0、1序号及其章名设为二级标题。最高......
  • 笔记九:github操作-github跨团队协作
    一:学习内容github跨团队协作流程图谱github跨团队协作流程案例实操 二:github跨团队协作流程图谱1.岳不群想要其他团队的大牛也帮忙修改一下华山剑法,让这套剑法更厉害,于是找到了东方不败帮忙,东方不败不是这个团队的人,所以不能直接操作岳不群团队的远程库,需要先fork岳不群的......
  • 笔记八:github操作-github团队内协作
    一:学习内容github团队内协作流程图谱github团队内协作流程案例实操 二:github团队内协作流程图谱1.师傅岳不群创建了一套华山剑法,把它推送到代码托管中心远程库2.弟子令狐冲将整套剑法下载到自己的本地库中3.弟子令狐冲对剑法进行修改调整,然后对修改的内容推送到代码托管中......
  • php kafka生产者,消费者操作
     php7.2  kafka7.8.1生产者代码<?php$conf=newRdKafka\Conf();$conf->setDrMsgCb(function($kafka,$message){file_put_contents("./dr_cb.log",var_export($message,true).PHP_EOL,FILE_APPEND);});$conf->setErrorCb(function($ka......
  • 笔记七:github操作-Push、Pull、Clone
    一:学习内容Push:推送本地分支到远程库Pull:拉取远程分支到本地库Clone:克隆远程库到本地 二:Push:推送本地分支到远程库需要注意:推送的时候,需要指定分支,也就是我把本地库的哪个分支推送到远程库1#推送本地分支到远程库,gitpush别名分支2#如果当前本地库在hot-fix分支上......
  • 笔记十一:Idea操作-集成git
    一:学习内容配置git忽略文件idea定位git程序idea初始化本地库idea添加暂存区idea提交本地库idea切换版本idea创建分支与切换分支idea合并分支-正常合并idea合并分支-冲突合并 二:配置git忽略文件1.创建git.ignore文件,即磁盘进入C:\\Users\\你的用户下,新建git.ignore......
  • 笔记十:github操作-ssh免密登录
    一:学习内容生成ssh免密登录密钥github配置ssh免密登录公钥测试ssh免密登录 二:本地生成ssh免密登录密钥因为github是国外网站国内访问https链接不稳定,所以我们会用ssh的方式访问,而ssh的方式就需要配置ssh密钥。1#添加ssh免密公钥,进入windows家目录,C:\\Users\\你的用户......
  • 笔记十二:Idea操作-集成github
    一:学习内容Idea设置github账号Idea分享项目到githubidea推送代码到远程库idea拉取远程库代码合并本地库idea克隆代码到本地 二:Idea设置github账号 我是授权的岳不群的github账号: 三:Idea分享项目到github这个操作相当于将创建远程库、push本地库代码到远程库......