go如何构建json数组呢?

情况是这样的,http请求中body中是json字符串,类似于这样:

{"result":"","status":false,"code":"1028","msg":"字段无效"}

我现在就是要把两个上面形式的字符串打包成如下形式返回

{"comMsg":[{"result":"","status":false,"code":"1028","msg":"字段"},{"result":"","status":false,"code":"1028","msg":"字段无效"}]}

应该怎么做?因为根据情况,服务器返回的字段是不固定的,所以没法讲单个json串统一转化成结构体,然后再由结构体数组转化为json数组,有其他办法吗?

就是原来服务端发给我的json字符串我不做任何改变,同时又得按照上面json数组形式返回给前端,直接拼成[]byte是不行的

共 3 个回复


leedstyh

如果你是原封不动的拼接起来,直接拼接bytes不就行了么

# 0

stevenldj

直接用 json 标准库就可以实现:


func main() {
    s1 := `{"result":"","status":false,"code":"1028","msg":"字段"}`
    s2 := `{"result":"","status":false,"code":"1028","msg":"字段无效"}`
    var m1, m2 map[string]interface{}

    json.Unmarshal([]byte(s1), &m1)
    json.Unmarshal([]byte(s2), &m2)

    m := make(map[string]interface{})
    m["comMsg"] = []map[string]interface{}{m1, m2}

    s, _ := json.Marshal(m)
    fmt.Printf("%s", s)
}

结果:

{"comMsg":[{"code":"1028","msg":"字段","result":"","status":false},{"code":"1028","msg":"字段无效","result":"","status":false}]}
# 1

stevenldj

m1 和 m2 可以简单声明成 interface{}:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    s1 := `{"result":"","status":false,"code":"1028","msg":"字段"}`
    s2 := `{"result":"","status":false,"code":"1028","msg":"字段无效"}`
    var m1, m2 interface{}

    json.Unmarshal([]byte(s1), &m1)
    json.Unmarshal([]byte(s2), &m2)

    m := make(map[string]interface{})
    m["comMsg"] = []interface{}{m1, m2}

    s, _ := json.Marshal(m)
    fmt.Printf("%s", s)
}
# 2