gpt4 book ai didi

arrays - 当数据库中不存在该行时,返回空的 json 数组

转载 作者:IT王子 更新时间:2023-10-29 02:02:12 26 4
gpt4 key购买 nike

我的函数接收到一个 http 请求并发回 json 字符串作为 http 响应。这是我的代码:

func homePage(res http.ResponseWriter, req *http.Request) {
type Resp struct {
Result []map[string]interface{} `json:"result,omitempty"`
Status string `json:"status"`
}
type Inputs struct {
ShopID string `json:"ShopID"`
DeviceID string `json:"DeviceID"`
EmpID string `json:"EmpID"`
Token string `json:"Token"`
Version string `json:"Version"`
}

var Response Resp
Response.Status = "failed"

db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/b2b")

if err != nil {
panic(err.Error())
}
defer db.Close()

rnd := render.New()
b, err := ioutil.ReadAll(req.Body)
defer req.Body.Close()

if err != nil {
panic(err.Error())
}
// Unmarshal the request body
var msg Inputs
err = json.Unmarshal(b, &msg)
if err != nil {
panic(err.Error())
}

bookingrows, bookingerr := db.Query("SELECT DISTINCT b2b_booking_id,b2b_check_in_report,b2b_vehicle_at_garage,b2b_service_under_progress,b2b_vehicle_ready,b2b_vehicle_delivered FROM b2b_booking_tbl WHERE b2b_flag=0 and b2b_shop_id=?", msg.ShopID)
if bookingerr != nil {
panic(bookingerr.Error())
} else {

Result := make(map[string]interface{})
for bookingrows.Next() {
var bookingid, checkinreported, vehicleingarage, serviceinprogress, vehicleready, vehicledelivered string
err = bookingrows.Scan(&bookingid, &checkinreported, &vehicleingarage, &serviceinprogress, &vehicleready, &vehicledelivered)
type Output struct {
checkins int `json:"checkins"`
inprogress int `json:"inprogress"`
ready int `json:"ready"`
completed int `json:"completed"`
}
var output Output
if err != nil {
panic(err.Error())
Response.Status = "failed"
}
if vehicledelivered == "1" {
output.completed = output.completed + 1
}
if vehicledelivered == "0" && vehicleready == "1" {
output.ready = output.ready + 1
}
if vehicledelivered == "0" && vehicleready == "0" && serviceinprogress == "1" {
output.inprogress = output.inprogress + 1
}
if vehicledelivered == "0" && vehicleready == "0" && serviceinprogress == "0" && (checkinreported == "1" || vehicleingarage == "1") {
output.checkins = output.checkins + 1
}

values := make([]string, 4)
val := reflect.ValueOf(output)
for i := range values {
//Result[usercolumns[i]] = fmt.Sprintf("%s", v)
Result[val.Type().Field(i).Tag.Get("json")] = fmt.Sprintf("%v", i)
}
}

Response.Result = append(Response.Result, Result)
Response.Status = "success"

}

res.Header().Set("Content-Type", "application/json")
rnd.JSON(res, http.StatusOK, Response)
}

当输入值正确并且 Db 中存在相应的行时,我将获得所需的输出。但是当输入错误或查询失败时,我应该只返回“失败”状态,但我的输出包含结果 [],它像这样是空的。

{
"result": [
{}
],
"status": "success"
}

我尝试检查 Result == nil 并仅在 true 时添加数组。但这对我没有帮助。可能是因为该结构不是空的。我需要一些帮助来找到问题并解决它。

最佳答案

在将其附加到输出之前尝试检查 Result 数组的长度

像这样

if (len(Result) != 0) {
Response.Result = append(Response.Result, Result)
}

也许您还需要在 if 条件中,在追加语句之前编写 Result := make(map[string]interface{})

关于arrays - 当数据库中不存在该行时,返回空的 json 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49148138/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com