go的json数据类型处理

json对象转slice

package main

import (
    "encoding/json"
    "fmt"
    "github.com/gogf/gf/container/garray"
)

func main() {
   
     // JSON 字符串
    jsonStr := `["apple", "banana", "orange"]`

//方法一:
        // 解析 JSON 字符串
        var data interface{
   }
        //json.Unmarshal 函数将 JSON 字符串解析为 Go 的内部数据结构(在这里是 []interface{})
        if err := json.Unmarshal([]byte(jsonStr), &data); err != nil {
   
            fmt.Println("解析 JSON 失败:", err)
            return
        }

     // 将数据转换为 g.Array
    array, ok := data.([]interface{
   })
        if !ok {
   
        	fmt.Println("无法转换为 g.Array")
        	return
    	}

      g.Dump(array)
//[
//  "apple",
//  "banana",
//  "orange", 
//]


//方法二:
//利用goframe提供的gjson
    content, _ := gjson.LoadContent(jsonStr)
    array := content.Array()
    g.Dump(array)
    
}

slice转garray

slice := []string{
   "apple", "banana", "orange"}
//方法一: 
    gArray := garray.New()
    for _, v := range slice {
   
     	gArray.Append(v)
   	}
//方法二:
	garray := garray.NewStrArrayFrom(slice)
	g.Dump(garray.Slice())
	// 输出结果
    fmt.Println(gArray.Slice())
    
//利用goframe提供的garray判断是否存在指定的字符串
	contains := garray.Contains("apple")
	g.Dump(contains)	   	


json转map和gmap

package main

import (
    "encoding/json"
    "fmt"
)
//JSON 字符串转换为 map[string]interface{} 类型
func main() {
   
     // JSON 字符串
    jsonStr := `{"name": "John", "age": 30, "city": "New York"}`

//方法一:
    // 解析 JSON 字符串
    var data map[string]interface{
   }
    if err := json.Unmarshal([]byte(jsonStr), &data); err != nil {
   
        fmt.Println("解析 JSON 失败:", err)
        return
    }

//方法二:
//利用goframe提供的gjson
	content, _ := gjson.LoadContent(jsonStr)
	data := content.Map()
 
	
     // 输出结果
    fmt.Println(data)

     // 将数据转换为 g.Map
    gMap := gmap.NewFrom(data)
    fmt.Println(gMap)
}

判断指定字符串是否在数组里面

   
    findStr := 3
    familyIds := "3,4"
    
    // 方式一:遍历
    // 字符串分割
    idsArr := gstr.Split(familyIds, ",")
    // 查找是否在数组里面
    for _, id := range idsArr {
   
        if id == gconv.String(findStr) {
   
            err = gerror.New("已加入")
            return
        }
    }
    
    //方式二:使用goframe 的 garray.StrArray
    idsArr := gstr.Split(familyIds, ",")
    
    //或者改成一句:gArr := garray.NewStrArrayFrom(idsArr)
    var gArr garray.StrArray
    gArr.Append(idsArr...)
    fmt.Println(gArr.Contains(findStr))  //true

省市区json数据转换

    // 获取文件路径
    // filePath := gfile.Pwd() + "/public/data.json"
    // 读取文件内容
    // dataJson := gfile.GetContents(filePath)
    dataJson := `{
        "code": "110000",
        "value": "北京市",
        "children": [
            {
                "code": "110100",
                "value": "北京市",
                "children": [
                    {
                        "code": "110101",
                        "value": "东城区"
                    },
                    {
                        "code": "110102",
                        "value": "西城区"
                    }
                ]
            }
        ]
    }`
    type Area struct {
   
        Code     string
        Value    string
        Children []Area
    }
    var area *Area
    
//方式一:使用 jsonObj.String() 将 jsonObj 对象转换为原始的 JSON 字符串
    jsonObj := gjson.New(dataJson)
    jsonStr := jsonObj.String()
    err = json.Unmarshal([]byte(jsonStr), &area)
    if err != nil {
   
        fmt.Println("转换失败:", err)
        return
    }
    g.Dump("area", area)
    
    
 //方式二:使用goframe的 gjson.Scan
    j, _ := gjson.LoadContent(dataJson)
    j.Scan(&area)
    g.Dump("area", area)
    

在这里插入图片描述

相关推荐

  1. GO: json 处理

    2023-12-31 22:54:02       37 阅读
  2. PostgreSQLJson数据类型如何使用

    2023-12-31 22:54:02       22 阅读
  3. 浅谈一下关系型数据库json类型字段处理

    2023-12-31 22:54:02       24 阅读
  4. MyBatis:PostGreSQLjsonb类型处理器

    2023-12-31 22:54:02       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-31 22:54:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-31 22:54:02       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-31 22:54:02       87 阅读
  4. Python语言-面向对象

    2023-12-31 22:54:02       96 阅读

热门阅读

  1. vue +WebSDK_V3.3.0

    2023-12-31 22:54:02       59 阅读
  2. 什么是Mustache

    2023-12-31 22:54:02       61 阅读
  3. 【MyBatis-Plus】内置接口的使用之CRUD

    2023-12-31 22:54:02       63 阅读
  4. DDD系列 - 第8讲 仓库Repository - JPA篇(二)

    2023-12-31 22:54:02       57 阅读
  5. 接口和抽象类

    2023-12-31 22:54:02       67 阅读
  6. C语言:void*概述(垃圾桶)

    2023-12-31 22:54:02       59 阅读
  7. 企微私域工具:打造高效客户管理新模式

    2023-12-31 22:54:02       72 阅读
  8. Spring Boot应用整合Prometheus

    2023-12-31 22:54:02       57 阅读