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
相关产品推荐
相关产品推荐

