JSON数组封送

JSON数组封送,json,go,Json,Go,我有一个返回接口{}的函数。如何将其序列化到JSON数组中,而无需对结构中的字段进行“硬编码”。 我正在使用返回接口 json.Unmarshal(resp.Bytes(), &response) data := map[string]interface{}{} dec := json.NewDecoder(strings.NewReader(resp.String())) dec.Decode(&data) jq := jsonq.NewQuery(data) results

我有一个返回接口{}的函数。如何将其序列化到JSON数组中,而无需对结构中的字段进行“硬编码”。 我正在使用返回接口

json.Unmarshal(resp.Bytes(), &response)
data := map[string]interface{}{}
dec := json.NewDecoder(strings.NewReader(resp.String()))
dec.Decode(&data)
jq := jsonq.NewQuery(data)

results, err := jq.Array("results")

if err != nil {
    log.Fatalln("Unable to get results: ", err)
}
if len(results) == 0 {
    return nil
}
return results // this is returning an interface{}

json字符串始终可以解组到
map[string]接口{}
。这就是您需要处理的内容。

json字符串始终可以被解组到
map[string]接口{}
。这就是您需要处理的问题。

我应该检查我正在处理的类型。我是通过以下方式发现的:

fmt.Println(reflect.TypeOf(results))
返回:[]接口{}

然后,我可以使用以下方法对其进行迭代:

for _, event:= range results {
        v, err := json.MarshalIndent(event, "", "  ")
        if err != nil {
            fmt.Println("error:", err)
        }
        fmt.Println(string(v))
    }

我应该检查一下我正在处理的类型。我是通过以下方式发现的:

fmt.Println(reflect.TypeOf(results))
返回:[]接口{}

然后,我可以使用以下方法对其进行迭代:

for _, event:= range results {
        v, err := json.MarshalIndent(event, "", "  ")
        if err != nil {
            fmt.Println("error:", err)
        }
        fmt.Println(string(v))
    }

我不明白这个问题:您似乎在解码JSON流,然后询问如何将数据结构序列化(即编码)为JSON流。你能详细说明一下吗?如果你不知道你得到了什么样的数据,你想怎么处理这些数据?最后,你是在兜圈子,因为在这条线上的某个点上,你需要知道你拥有什么样的数据才能使用它。如果情况并非如此(比如你只想将数据原样写入某个数据库、文件等),那么你不需要首先对其进行解组。@kostix我从一个我不控制的外部API获取数据,我不想存储它提供给我的所有数据,只存储JSON响应的一部分。我计划将其存储在MongoDB或其他地方,但目前我只是尝试以可读的形式打印出来。真的很新,所以如果这个问题很傻,我很抱歉。你有没有尝试过只
fmt.Println(results)
?它应该自己解决这个问题;-)在任何一种情况下,股票JSON编码器都可以接受
接口{}
,因此您只需执行
v,err:=JSON.Marshal(results)
即可在
v
中获得
[]字节
序列化。我不明白问题:您似乎在解码JSON流,然后询问如何序列化(即编码)JSON流的数据结构。你能详细说明一下吗?如果你不知道你得到了什么样的数据,你想怎么处理这些数据?最后,你是在兜圈子,因为在这条线上的某个点上,你需要知道你拥有什么样的数据才能使用它。如果情况并非如此(比如你只想将数据原样写入某个数据库、文件等),那么你不需要首先对其进行解组。@kostix我从一个我不控制的外部API获取数据,我不想存储它提供给我的所有数据,只存储JSON响应的一部分。我计划将其存储在MongoDB或其他地方,但目前我只是尝试以可读的形式打印出来。真的很新,所以如果这个问题很傻,我很抱歉。你有没有尝试过只
fmt.Println(results)
?它应该自己解决这个问题;-)在任何一种情况下,股票JSON编码器都可以接受
接口{}
,因此您只需执行
v,err:=JSON.Marshal(results)
即可在
v
中获得
[]字节
序列化。