json对象转slice
go
复制代码
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
go
复制代码
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
go
复制代码
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)
}
判断指定字符串是否在数组里面
go
复制代码
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数据转换
go
复制代码
// 获取文件路径
// 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)