编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天编程网就整理分享《提取不了从 YAML 映射中的键
编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天编程网就整理分享《提取不了从 YAML 映射中的键/值对》,文章讲解的知识点主要包括,如果你对golang方面的知识点感兴趣,就不要错过编程网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。
问题内容我使用 Goldmark-meta 包来读取 yaml 文件。 我感兴趣的内容是这样的 在 yaml 中:
burger:
- a: ay
- b: bee
- c: see
我想访问键和值 返回的界面,我被卡住了。 迭代返回给了我一个 键/值对的列表,但我没有 当我不知道时知道如何获取任何信息 提前知道按键名称。 该程序打印出以下内容:
func (c *config) burger() string {
// c.pagefm is type map[string]interface{}
b, ok := c.pagefm["burger"].([]interface{})
if !ok {
// no burger entry in yaml
return ""
}
debug("burger list has %v items:\n%v", len(b), b)
debug("type: %v", reflect.typeof(b))
for i := 0; i < len(b); i++ {
debug("%v", b[i])
}
return ""
}
Burger list has 3 items:
[map[a:ay] map[b:bee] map[c:see]]
Type: []interface {}
map[a:ay]
map[b:bee]
map[c:see]
如何获取键和值字符串?
在您的 yaml 数据中,您有一个键 (burger
),其值是映射列表(每个映射都有一个键)。我们可以像这样迭代 burger
中的项目:
b, ok := c.pagefm["burger"].([]interface{})
if !ok {
return ""
}
for _, item := range burger {
...
}
对于每个 item
,我们可以迭代可用的键和值:
for _, item := range burger {
for k, v := range item.(map[interface{}]interface{}) {
...
}
}
我们可以使用 fmt.sprintf
将 interface{}
中的键和值转换为 string
:
for _, item := range burger {
for k, v := range item.(map[interface{}]interface{}) {
k_str := fmt.sprintf("%v", k)
v_str := fmt.sprintf("%v", v)
fmt.printf("key %s value %s\n", k_str, v_str)
}
}
从 来自 goldmark-meta
的示例代码开始,我把这个例子放在一起:
package main
import (
"bytes"
"fmt"
"GitHub.com/yuin/goldmark"
meta "github.com/yuin/goldmark-meta"
"github.com/yuin/goldmark/parser"
)
func main() {
markdown := goldmark.new(
goldmark.withextensions(
meta.meta,
),
)
source := `---
burger:
- a: ay
- b: bee
- c: see
---
# hello goldmark-meta
`
var buf bytes.buffer
context := parser.newcontext()
if err := markdown.convert([]byte(source), &buf, parser.withcontext(context)); err != nil {
panic(err)
}
metadata := meta.get(context)
burger := metadata["burger"].([]interface{})
for _, item := range burger {
for k, v := range item.(map[interface{}]interface{}) {
k_str := fmt.sprintf("%v", k)
v_str := fmt.sprintf("%v", v)
fmt.printf("key %s value %s\n", k_str, v_str)
}
}
}
哪些输出:
key a value ay
key b value bee
key c value see
以上就是《提取不了从 YAML 映射中的键/值对》的详细内容,更多关于的资料请关注编程网公众号!
--结束END--
本文标题: 提取不了从 YAML 映射中的键/值对
本文链接: https://lsjlt.com/news/595640.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0