首页 > 解决方案 > 从未编组的数据中准备一个 json 对象

问题描述

我有这样的json数据:

json: {"opt1":200,"opt3":"1","opt4":"13","opt5":null,"products":[{"product_id":1,"price":100,"variant_id":100},{"product_id":1,"price":100,"variant_id":null}]}

我已经使用

type Products struct {
    Product_id int
    Price json.Number
    Variant_id int
}


type Pdata struct {
    Products []Products `json:"products"`
}

然后我使用解组

jsonb := []byte(jsonVal)
    var data Pdata
    err := json.Unmarshal(jsonb, &data)
    if err != nil {
        fmt.Println(err)
        return
    }

并获得类似的输出

{[{1 100 100} {2 100 0}]}

现在我需要将该数据转换为这样的 json 对象

{"purchased_products": [{"product_id": 1,"price": 1200,"variation_id": 100},{"product_id": 2,"price": 100,"variation_id": null}]}

之后,我需要将它分配给“json”

var d = map[string]string{
    "json":        jsonVal,
    "created_at":  time.Now().Format("2006-01-02 15:04:05"),
    "updated_at":  time.Now().Format("2006-01-02 15:04:05"),
}

我该怎么做?

标签: jsongoencoding-json-go

解决方案


如下创建一个类型(例如:PurchableProducts)。

type PurchasedProducts struct {
    Products []Products `json:"purchased_products"`
}

并初始化一个 PurchasedProducts 类型变量并将您的未编组产品分配给 Purchased 产品,如下所示。

    pProducts := PurchasedProducts{Products: data.Products}
    jsonByte, err := json.Marshal(pProducts)
    if err != nil {
        fmt.Println(err)
        return
    }

并将该[]byte数组转换为字符串并将其分配给如下图。

    var d = map[string]string{
        "json":        string(jsonByte),
        "created_at":  time.Now().Format("2006-01-02 15:04:05"),
        "updated_at":  time.Now().Format("2006-01-02 15:04:05"),
    }

您可以在此处运行并查看完整代码。


推荐阅读