You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go使用gjson库时如何将JSON数组强制转换为字符串切片

gjson JSON数组转字符串切片实现方法

你原来的代码报错是因为Value()方法返回的是interface{}空接口类型,Go语言不允许直接对空接口执行range遍历操作,必须先明确其实际类型。推荐使用gjson内置方法实现转换,操作更简洁:

方法1:使用内置Array()方法(推荐)

直接调用gjson.Result的Array()方法获取[]gjson.Result类型数组,遍历后逐个转字符串即可:

package main

import (
    "fmt"

    "github.com/tidwall/gjson"
)

func main() {
    j := `{"array": ["a","b","c"]}`
    // 获取数组结果
    arrayRes := gjson.Parse(j).Get("array").Array()
    // 初始化字符串切片
    strSlice := make([]string, len(arrayRes))
    for i, res := range arrayRes {
        strSlice[i] = res.String()
    }
    // 输出验证:[]string{"a", "b", "c"}
    fmt.Printf("%#v", strSlice)
}

该方法无需手动做类型断言,gjson会自动处理JSON数组的类型校验,代码容错性更高。

方法2:基于Value()返回值做类型断言

如果你需要保留Value()的调用逻辑,需要做两层类型断言:

package main

import (
    "fmt"

    "github.com/tidwall/gjson"
)

func main() {
    j := `{"array": ["a","b","c"]}`
    gj := gjson.Parse(j).Get("array").Value()
    // 第一层断言:判断是否为数组类型
    arr, ok := gj.([]interface{})
    if !ok {
        fmt.Println("目标字段不是数组类型")
        return
    }
    strSlice := make([]string, len(arr))
    for i, v := range arr {
        // 第二层断言:判断元素是否为字符串类型
        str, ok := v.(string)
        if ok {
            strSlice[i] = str
        }
    }
    // 输出验证:[]string{"a", "b", "c"}
    fmt.Printf("%#v", strSlice)
}

内容的提问来源于stack exchange,提问作者Steve Crook

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:54:03