json - 从未编组的数据中准备一个 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"),
}
我该怎么做?
解决方案
如下创建一个类型(例如: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"),
}
您可以在此处运行并查看完整代码。
推荐阅读
- azure-functions - System.Configuration.ConfigurationManager [4.7-6.0] 返回 null 值访问 Azure 函数中的 app.config
- google-chrome - MediaDevices.enumerateDevices() 未在浏览器中显示虚拟网络摄像头,但 google meet 和其他网站正在显示
- python - 错误代码:-1104 在 Binance API 中下订单时(未读取所有参数)
- angular - 为什么这个 Angular 服务返回空值?
- python - PyQt5 QDateEdit,仅未显示月份和年份
- python - AttributeError:“JWTManager”对象没有属性“token_in_blacklist_loader”
- gitlab - Gitlab管道规则:当分支有打开的合并请求时如何不运行作业?防止重复管道
- php - 在 Laravel 8 中找不到类“App\Models\BlogPostCategory”
- java - 如何在 Spring Boot 中使用加密的有效负载
- android - 应用程序无法全屏运行?无论是在模拟器上还是在手机上