go语言JSON字典模拟

2022-09-16 03:18:27

 

有关 golang 里JSON 使用的用法整理

 

package main

import (
	"encoding/json"
	"fmt"
)

type JSON = map[string]interface{}

func makeJson() JSON {
	var obj = make(JSON)
	return obj
}

func stringify(obj JSON) string {
	b, err := json.Marshal(obj)
	if err != nil {
		fmt.Printf("marshal failed, err:%v\n", err)
	}
	return string(b)
}

func parse(str string) JSON {
	var obj = makeJson()
	err := json.Unmarshal([]byte(str), &obj)
	// 结果:map字典: map[count:1]
	//fmt.Printf("map字典: %v\n", obj) // 1
	if err != nil {
		fmt.Printf("unmarshal failed, err:%v\n", err)
		return obj
	}

	return obj
}

func main() {

	var obj = makeJson()
	obj["count"] = 123   // int
	obj["name"] = "test" // string

	var subobj = makeJson()
	subobj["aaa"] = 111
	subobj["bbb"] = 22.33
	subobj["ccc"] = "test"

	obj["subobj"] = subobj // int

	fmt.Printf("打印字典: %v\n", obj)

	str := stringify(obj)

	fmt.Printf("打印json: %v\n", str)

	fmt.Printf("打印 obj: %v\n", parse(str))

	newobj := parse(str)
	fmt.Printf("打印 json: %v\n", newobj["subobj"])

	sub := newobj["subobj"].(JSON)

	fmt.Printf("打印 json: %v\n", sub["aaa"])

}

 

通过 Path Syntax 解析/编辑JSON

 

GJSON 是一个 Go 包,它提供了一种从 json 文档中获取值的快速简单的方法。它具有单行检索点符号路径迭代解析 json 行等功能。

还可以查看SJSON以修改 json,以及JJ命令行工具。

本自述文件是如何使用 GJSON 的快速概述,有关更多信息,请查看GJSON 语法

GJSON 也可用于PythonRust

package main

import "github.com/tidwall/gjson"

const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`

func main() {
	value := gjson.Get(json, "name.last")
	println(value.String())
}

 

SJSON 是一个 Go 包,它提供了一种非常快速和简单的方法来在 json 文档中设置值。要快速检索 json 值,请查看GJSON

对于命令行界面,请查看JJ

package main

import "github.com/tidwall/sjson"

const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`

func main() {
	value, _ := sjson.Set(json, "name.last", "Anderson")
	println(value)
}

 

参考
go中对json数据的解析和封装  
Jsonvalue - Go map[string]interface{} 更快和更方便的替代品