一段时间以来,我一直在为这个问题而烦恼。我有一个 JSON 文件,它必须采用以下格式,我需要在 Go 中迭代并使用 IF 语句:
[
[
{
"configName": "customer"
},
{
"config": [
{
"emailSubject": "New customer added"
},
{
"text": "Hi test 2"
},
{
"text": "added 2"
}
]
}
]
[
{
"configName": "customerAndUser"
},
{
"config": [
{
"emailSubject": "New customer added"
},
{
"text": "Hi, test 1"
},
{
"text": "added 1"
}
]
}
]
]
我想把它放到一个结构中,像这样:
type Config [][]struct {
configName string `json: configName`
config []struct {
Text string `json: text`
EmailSubject string `json: emailSubject`
} `json: config`
}
我可以像这样很好地解码数据:
configData, err := ioutil.ReadFile("testing-config.json")
if err != nil {
fmt.Println(err)
}
var configDataUnmarshalled Config
json.Unmarshal([]byte(configData), &configDataUnmarshalled)
然后数据打印出来,还好,但这里有点奇怪:打印语句为我没有指定要打印的项目返回空白。以下是我打印未编码数据时打印的示例:
打印未编码数据的输出:
[[{customer []} { [{ New customer added} {hi test 2 } {added 2 }]}] [{customerAndUser []} { [{ New customer added} {hi test 1 } {added 1 }]}]]
但是我似乎无法使用 IF 语句或循环遍历配置键中的元素!
IF 语句在 for 循环中被忽略(见代码下方的输出)
for _, configs := range configDataUnmarshalled {
for _, configurations := range configs {
fmt.Println("These are the top level elements in my struct: ", configurations.ConfigName)
if configurations.ConfigName == "customerAndUser" {
for _, config := range configurations.Config {
fmt.Println(config)
}
}
}
}
这是打印的内容:
These are the top level elements in my struct: customer
These are the top level elements in my struct:
These are the top level elements in my struct: customerAndUser
These are the top level elements in my struct:
从 FOR 循环中,您可以看到我想在配置具有特定名称时访问数据,在本例中为“customerAndUser”
这里完全忽略了 IF 语句
我有两件事想了解/解决:
期望的输出是打印出 emailSubject 和两个 Text 元素的数据到名为 customerAndUser 的配置的控制台
应该打印什么:
New customer added
hi test 1
added 1
谢谢你的帮助
最佳答案
json 配置很臭。包含 configName 和 config 的结构是一个 slice 中的两个独立结构。 configName 具有值,因此 config 为空且向后。这将在像这样的 json 时起作用。
{
"configName": "customerAndUser",
"config": [
{
"emailSubject": "New customer added"
},
{
"text": "Hi, test 1"
},
{
"text": "added 1"
}
]
}
所以如果你不能改变 json 配置格式。这是解决方案
endUser := false
for _, configs := range configDataUnmarshalled {
endUser = false
for _, configurations := range configs {
if configurations.ConfigName == "customerAndUser" {
endUser = true
continue
}
if !endUser || len(configurations.Config) == 0 {
continue
}
for _, config := range configurations.Config {
fmt.Println(config)
}
}
}
关于json - 将复杂的 JSON 解码为结构并访问数据( slice 的 slice ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53540007/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我主要使用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
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
在我的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标准库是否已经带有这样一个类? 最佳
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
我有一个非常简单的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":
我正在尝试使用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_