Map 与 Json

个人觉得map与json很有意思呢,map与json可以实现互转

1、map是无序的,等同的数据,存储在map中、存储在json中,序列化json与序列化map是有不同结果的,举个栗子:

package MapByOrder

import (
	"encoding/base64"
	"fmt"
	"reflect"
	"encoding/json"
)

type Person struct{
	Name string `json:"name"`
	Phone string `json:"phone"`
	Number int64 `json:"number"`
}


func MapOrder(){
	
	var Persons []Person
	Persons = append(Persons,Person{
		Name:"lisa",
		Phone:"135000000000",
		Number:111,
	})
	Persons = append(Persons,Person{
		Name:"Michel",
		Phone:"137000000000",
		Number:222,
	})
	StrP_json, _:= json.Marshal(Persons)
	encodeString := base64.StdEncoding.EncodeToString(StrP_json)
	fmt.Printf("%v - %v\n encodeString: %v\n\n",reflect.TypeOf(Persons),Persons,string(encodeString))

	var MapPersons []interface{}
	var MapPerson1 = make(map[string]interface{})
	MapPerson1["name"] = "lisa"
	MapPerson1["phone"] = "135000000000"
	MapPerson1["number"] = 111

	var MapPerson2 = make(map[string]interface{})
	MapPerson2["name"] = "Michel"
	MapPerson2["phone"] = "137000000000"
	MapPerson2["number"] = 222

	MapPersons = append(MapPersons,MapPerson1)
	MapPersons = append(MapPersons,MapPerson2)

	MapP_json, _:= json.Marshal(MapPersons)
	encodeString2 := base64.StdEncoding.EncodeToString(MapP_json)
	fmt.Printf("%v - %v\n encodeString: %v\n\n",reflect.TypeOf(MapPersons),MapPersons,string(encodeString2))

	return 
}

然后输出结果是这样子的:

[]MapByOrder.Person - [{lisa 135000000000 111} {Michel 137000000000 222}]
 encodeString: W3sibmFtZSI6Imxpc2EiLCJwaG9uZSI6IjEzNTAwMDAwMDAwMCIsIm51bWJlciI6MTExfSx7Im5hbWUiOiJNaWNoZWwiLCJwaG9uZSI6IjEzNzAwMDAwMDAwMCIsIm51bWJlciI6MjIyfV0=

[]interface {} - [map[name:lisa phone:135000000000 number:111] map[name:Michel phone:137000000000 number:222]]
 encodeString: W3sibmFtZSI6Imxpc2EiLCJudW1iZXIiOjExMSwicGhvbmUiOiIxMzUwMDAwMDAwMDAifSx7Im5hbWUiOiJNaWNoZWwiLCJudW1iZXIiOjIyMiwicGhvbmUiOiIxMzcwMDAwMDAwMDAifV0=

尝试编译运行代码,可能每次的encodeString是不一样的

2、map转化成json,嵌套的数据也能正常解析,看下代码:

package  JsonParse

import (
	"fmt"
	"encoding/json"
)


type Parents struct{
	Father string `json:"father"`
	Mother string `json:"mother"`
}

type InnerJson struct{
	Name string `json:"name"`
	Age int `json:"age"`
	Relative Parents `json:"relative"` 
}

func JsonInner(){
	var value = make(map[string]interface{})
	value["name"] = "lisa"
	value["age"] = 16
	var subvalue = make(map[string]interface{})
	subvalue["father"] = "lisa-father"
	subvalue["mother"] = "lisa-mother"
	value["relative"] = subvalue

	var inner InnerJson
	bytesValue,_:=json.Marshal(value)
	json.Unmarshal(bytesValue,&inner)
	fmt.Printf("inner: %#v\n",inner)
}

然后,它的运行结果是这样子的:

inner: JsonParse.InnerJson{
	Name:"lisa", 
	Age:16, 
	Relative:JsonParse.Parents{
		Father:"lisa-father", 
		Mother:"lisa-mother"
		}
	}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值