Go生成json、解析json和多维json数组解析

本文通过实例演示了如何使用Go语言进行JSON数据的生成与解析,涵盖了单个对象、数组及复杂结构的处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

go生成和解析json结构是按结构体模式解析的,所以结构体类型一定要多练习熟悉。

完整代码(可以运行):

// +build ignore
package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name string
	Age  int
}

type Family struct {
    Persons []Person
}

func main() {
	// 根据结构体生成json
	manJson := Person{
		Name: "Elinx",
		Age:  26,
	}
	man, _ := json.Marshal(manJson)
	fmt.Println(string(man))

	// 解析json到结构体
	jsonStr := []byte(`{"Name":"Elinx","Age":26}`)
	var man2 Person
	json.Unmarshal(jsonStr, &man2)
	fmt.Println(man2)

	// 解析json数组到切片(数组)
	jsonArrStr := []byte(`[{"Name":"Elinx","Age":26}, {"Name":"Twinkle","Age":21}]`)
	var jsonSlice []map[string]interface{}

	json.Unmarshal(jsonArrStr, &jsonSlice)
	fmt.Println(jsonSlice)

	// 解析多维数组
	var f Family

    // 模拟传输的Json数据
    familyJSON := `{"Persons": [{"Name":"Elinx","Age":26}, {"Name":"Twinkle","Age":21}] }`
	
	fmt.Println("======================")

    // 解析字符串为Json
	json.Unmarshal([]byte(familyJSON), &f)
	// 直接输出并不会展示全部层级,原因待考究
	fmt.Println(f)
	// 从新生成json字符串查看真实结构
	jsons, _ := json.Marshal(f)

	fmt.Println(string(jsons))
}

直接解析单键json

可以使用直接json转map结构

// 直接解析json单key结构,不使用结构体
uploadJSON := `{"xxxx": "test","zzzz": "1111111"}`
var jsonSlice2 map[string]interface{}
json.Unmarshal([]byte(uploadJSON), &jsonSlice2)
fmt.Println(jsonSlice2)

参考文献

1.go json字符串转切片
2.golang生成JSON及解析JSON

当你需要使用 CJSON 解析包含多维数组结构的 JSON 数据时,你可以按照以下步骤来进行操作: ### 步骤一:理解JSON数据结构 首先明确你要解析JSON字符串的具体内容及其结构。例如下面这个表示一个多维数组的例子: ```json { "data":[[1,2], [3,4]] } ``` 这里`"data"`键对应的是一个二维数组。 ### 步骤二:初始化cJSON库并加载JSON字符串 确保已经正确引入了 `cJSON.h` 文件,并通过函数如 `cJSON_Parse()` 将你的JSON字符串转换成 cJSON 对象指针。 ```c #include "cJSON.h" // 假设 jsonStr 是上面提到的那个 JSON 字符串变量 const char* jsonStr = "{\"data\":[[1,2],[3,4]]}"; cJSON *root = cJSON_Parse(jsonStr); if (root == NULL) { // 错误处理... } ``` ### 步骤三:访问目标元素 对于每个层级都采用类似的方式逐步深入查找,直到到达最内层的数据项为止。比如我们要获取上述示例里所有数值的话可以这样做: ```c cJSON *arrayData = cJSON_GetObjectItemCaseSensitive(root,"data"); if(cJSON_IsArray(arrayData)){ int i,j; for(i=0;i<cJSON_GetArraySize(arrayData);++i){ cJSON *innerArray=cJSON_GetArrayItem(arrayData,i); if(!cJSON_IsArray(innerArray)) continue; // 跳过非数组类型的项目 printf("Inner Array %d:",i+1); for(j=0;j<cJSON_GetArraySize(innerArray);++j) printf("%d ",(int)cJSON_GetArrayItem(innerArray,j)->valuedouble); putchar('\n'); } } // 最后记得释放资源 cJSON_Delete(root); ``` 以上就是如何利用 cjson解析含有多级嵌套数组形式的 JSON 的基本方法啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值