go语言-json数据处理

本文介绍了一个名为simplejson的Go语言工具包,用于简化JSON数据处理。文章通过四个案例展示了如何使用simplejson进行JSON数据的解析、检查字段存在性、处理JSON数组及创建JSON数据。

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

前言:go语言原生的json数据处理包encoding/json实在太恶心人了,要求每使用一个json就必须定义一个对应的结构体。有时候处理接口返回数据时,json结构很复杂,原生的包无法满足我们的需要。故引入了gitlab上的一个工具包simplejson。

1. 安装
go get github.com/bitly/go-simplejson
2. 引入
import (
    simplejson "github.com/bitly/go-simplejson"
)
case1 基础使用-数据解析
func case1() {
    //初始化*simpleJson.Json对象
    sj, err := simplejson.NewJson([]byte(jsonStr))

    var v *simpleJson.Json
    
    //获取字段,如果有多级,可以层层嵌套获取
    v = sj.Get(字段名1).Get(字段名2)
    
    //将v的值转化为具体类型的值,MustXXX方法一定可以转化成功
    //若转化不成功,则转化为该类型的零值
    result := v.MustString()
}
case2 检查key是否存在
func case2() {
    //检查某个字段是否存在 
    _, ok := js.Get("字段名1").CheckGet("字段名2") 
    if ok { 
        fmt.Println("存在!") 
    } else { 
        fmt.Println("不存在") 
    }
    
}

case3 处理json数组
func case3(){
	personArr, err :=js.Get("persons").Array() //拿到json数组
	fmt.Println(len(personArr))
	
	// 遍历
	for i, _ := range personArr {
	//fmt.Println(i, v)
	person := js.Get("person").GetIndex(i)
	name := person.Get("name").MustString()
	age := person.Get("age").MustInt()
	email := person.Get("email").MustString()
	
	fmt.Printf("name=%s, age=%d, email=%s\n", name, age, email)
}
case4 创建json数据
package main

import (
    "encoding/json"
    "fmt"
    "github.com/bitly/go-simplejson" // for json get
)

var jsonStr = `
       {
           "person": [{
              "name": "piao",
              "age": 30,
              "email": "piaoyunsoft@163.com",
              "phoneNum": [
                  "13974999999",
                  "13984999999"
              ]
           }, {
              "name": "aaaaa",
              "age": 20,
              "email": "aaaaaa@163.com",
              "phoneNum": [
                  "13974998888",
                  "13984998888"
              ]
           }, {
              "name": "bbbbbb",
              "age": 10,
              "email": "bbbbbb@163.com",
              "phoneNum": [
                  "13974997777",
                  "13984997777"
              ]
           }]
       }
       `

func main() {
    js, err := simplejson.NewJson([]byte(jsonStr))

    if err != nil {
        panic(err.Error()) //抛出异常
    }

    personArr, err := js.Get("person").Array()
    fmt.Println(len(personArr))

    // 遍历
    for i, _ := range personArr {
        //fmt.Println(i, v)
        person := js.Get("person").GetIndex(i)
        name := person.Get("name").MustString()
        age := person.Get("age").MustInt()
        email := person.Get("email").MustString()

        fmt.Printf("name=%s, age=%d, email=%s\n", name, age, email)

        // 读取手机号
        phoneNumArr, _ := person.Get("phoneNum").Array()
        for ii, vv := range phoneNumArr {
            fmt.Println(ii, vv)
        }
    }

    // make a json string 0
    if true {
        jData := make(map[string]interface{})

        var persionArray []interface{}
        for i := 0; i < 2; i++ {
            persion := make(map[string]interface{})

            if true {
                persion["name"] = "piao"
                persion["age"] = 30
                persion["email"] = "piao1@email"

                if true {
                    var phoneNumArray []interface{}

                    phoneNumArray = append(phoneNumArray, "13793135326")
                    phoneNumArray = append(phoneNumArray, "13793135327")

                    persion["phoneNum"] = phoneNumArray
                }

            }

            persionArray = append(persionArray, persion)
        }

        jData["persion"] = persionArray
        c, _ := json.Marshal(jData)
        fmt.Println(string(c))
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值