草庐IT

json - 解码 JSON 保留所有 key

coder 2023-07-03 原文

我有这种类型的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/

有关json - 解码 JSON 保留所有 key的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在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

  2. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  3. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  4. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  5. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值: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

  6. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的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":

  7. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用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("

  8. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.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

  9. ruby - 如何遍历 Ruby 中所有正则表达式匹配的字符串? - 2

    我们有一个字符串:“”这个正则表达式://i如何从当前字符串中获取所有匹配项? 最佳答案 "".scan(//)参见scan在ruby​​-docs上 关于ruby-如何遍历Ruby中所有正则表达式匹配的字符串?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6857852/

  10. ruby-on-rails - 在所有延迟的作业之前 Hook - 2

    是否可以在所有delayed_job任务之前运行一个方法?基本上,我们试图确保每个运行delayed_job的服务器都有我们代码的最新实例,所以我们想运行一个方法来在每个作业运行之前检查它。(我们已经有了“check”方法并在别处使用它。问题只是关于如何从delayed_job中调用它。) 最佳答案 现在有一种官方方法可以通过插件来做到这一点。这篇博文通过示例清楚地描述了如何执行此操作http://www.salsify.com/blog/delayed-jobs-callbacks-and-hooks-in-rails(本文中描述

随机推荐