我有这种类型的JSON结构
{
"<server>": {
"<guest>": {
"<service>": {
"<part>": {
"num": "<number>",
"type": "<type>",
"timestamp": "2016-02-01T12:53:12Z"
}
}
}
}
}
在对 JSON 对象进行解码期间,我需要保留 key ,例如server , guest等。我想到了下面的结构,但我无法在 JSON 对象上方解码,因为在解码过程中 key 丢失了。
type Section struct {
Bytes int
Files int
Timestamp time.Time
}
type Report struct {
Server string
Guest string
Service string
Part string
Details Section
}
有没有什么方法可以将上面的 JSON 对象解码为保持 key 完整的结构。
编辑:
里面的文字<server>正在改变。这就是为什么我需要在解码后保留它,以便我可以进一步处理它。
最佳答案
1- 在 The Go Playground 上试用:
package main
import (
"encoding/json"
"fmt"
"time"
)
func main() {
s := `{
"<server1>": {
"<guest2>": {
"<service3>": {
"<part4>": {
"num": 12,
"type": 14,
"timestamp": "2016-02-01T12:53:12Z"
}
}
}
}
}`
var data map[string]map[string]map[string]map[string]Section
err := json.Unmarshal([]byte(s), &data)
if err != nil {
fmt.Println(err)
}
fmt.Println(data)
}
type Section struct {
Bytes int `json:"num"`
Files int `json:"type"`
Timestamp time.Time `json:"timestamp"`
}
type Report struct {
Server string
Guest string
Service string
Part string
Details Section
}
输出:
map[<server1>:map[<guest2>:map[<service3>:map[<part4>:{12 14 2016-02-01 12:53:12 +0000 UTC}]]]]
2- 转换为Report struct,试试The Go Playground :
package main
import (
"encoding/json"
"fmt"
"time"
)
func main() {
s := `{
"<server1>": {
"<guest2>": {
"<service3>": {
"<part4>": {
"num": 12,
"type": 14,
"timestamp": "2016-02-01T12:53:12Z"
}
}
}
}
}`
var data map[string]map[string]map[string]map[string]Section
err := json.Unmarshal([]byte(s), &data)
if err != nil {
fmt.Println(err)
}
r := Report{}
for k, v := range data {
r.Server = k
for k2, v2 := range v {
r.Guest = k2
for k3, v3 := range v2 {
r.Service = k3
for k4, v4 := range v3 {
r.Part = k4
r.Details = v4
}
}
}
}
fmt.Println(r)
}
type Section struct {
Bytes int `json:"num"`
Files int `json:"type"`
Timestamp time.Time `json:"timestamp"`
}
type Report struct {
Server string
Guest string
Service string
Part string
Details Section
}
输出:
{<server1> <guest2> <service3> <part4> {12 14 2016-02-01 12:53:12 +0000 UTC}}
关于json - 解码 JSON 保留所有 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39867603/
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我有一个非常简单的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":
我正在使用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("
我有一个.pfx格式的证书,我需要使用ruby提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o
我们有一个字符串:“”这个正则表达式://i如何从当前字符串中获取所有匹配项? 最佳答案 "".scan(//)参见scan在ruby-docs上 关于ruby-如何遍历Ruby中所有正则表达式匹配的字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6857852/
是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述