我的函数接收到一个 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/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]
我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":
我的模型有defself.empty_building//stuffend我怎样才能对这个现有的进行rspec?,已经尝试过:describe"empty_building"dosubject{Building.new}it{shouldrespond_to:empty_building}endbutgetting:Failure/Error:it{shouldrespond_to:empty_building}expected#torespondto:empty_building 最佳答案 你有一个类方法self.empty_bu
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_