在我的mongodb中,我有字段
"createdAt" : ISODate("2018-10-02T01:17:58.000Z")
我有结构有字段
CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
但是当我通过 json 响应时,它缺少零毫秒 我以为
"createdAt": "2018-10-02T01:17:58.000Z"
但是收到了
"createdAt": "2018-10-02T01:17:58Z"
最佳答案
来自 golang.org/pkg/time/#Time.MarshalJSON:
The time is a quoted string in RFC 3339 format, with sub-second precision added if present.
零是不重要的,所以它们被省略了。如果这对您不起作用,请实现您自己的 MarshalJSON 方法:
package main
import (
"encoding/json"
"fmt"
"time"
)
type MyType struct {
Foo string
CreatedAt time.Time `json:"-" bson:"createdAt"`
}
func (t MyType) MarshalJSON() ([]byte, error) {
type MyType_ MyType // prevent recursion
return json.Marshal(struct {
MyType_
CreatedAt string `json:"createdAt"` // Override time field
}{
MyType_(t),
t.CreatedAt.Format("2006-01-02T15:04:05.000Z07:00"),
})
}
func main() {
t := MyType{
Foo: "bar",
CreatedAt: time.Date(2018, 10, 2, 12, 13, 14, 0, time.UTC),
}
b, err := json.MarshalIndent(t, "", " ")
fmt.Println(err, string(b))
t.CreatedAt = t.CreatedAt.Add(123456 * time.Microsecond)
b, err = json.MarshalIndent(t, "", " ")
fmt.Println(err, string(b))
}
// Output:
// <nil> {
// "Foo": "bar",
// "T": "2018-10-02T12:13:14.000Z"
// }
// <nil> {
// "Foo": "bar",
// "T": "2018-10-02T12:13:14.123Z"
// }
https://play.golang.org/p/bmDk1pejGPS
如果您必须在许多地方执行此操作,那么创建您自己的时间类型可能是值得的(但是,如果您必须进行日期数学运算,那将是不方便的):
type MyType struct {
Foo string
CreatedAt MyTime `json:"createdAt" bson:"createdAt"`
}
type MyTime struct {
time.Time
}
func (t MyTime) MarshalJSON() ([]byte, error) {
return json.Marshal(t.Format("2006-01-02T15:04:05.000Z07:00"))
}
关于mongodb - 我怎样才能在 json 中响应时间毫秒为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52600873/
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我有一个非常简单的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":
其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("