首頁  >  文章  >  後端開發  >  嘗試解析 yaml 時如何從字串句子中刪除撇號/位元組標記

嘗試解析 yaml 時如何從字串句子中刪除撇號/位元組標記

WBOY
WBOY轉載
2024-02-05 22:45:111150瀏覽

"尝试解析

問題內容

這裡是實例

yaml解析函式庫好像無法列印" 所以當我用 " 解析一個句子時,go 在它周圍加上位元組撇號 (')

是否有一些技巧可以讓它列印/製作簡單的字串/引號字串,而不添加位元組撇號?

範例程式碼:

import (
    "fmt"
    "log"

    yaml "gopkg.in/yaml.v3"
)

type X struct {
    Example string `yaml:"some-example"`
}

func main() {
    item := X{
        Example: fmt.Sprint("\"some text\""),
    }

    res, err := yaml.Marshal(item)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Print(string(res))
}

列印 some-example: '"some text"'

想要some-example:「一些文字」


正確答案


是否有一些技巧可以讓它列印/製作簡單的字串/引號字串,而不加字節撇號?

請注意,您正在列印 yaml.marshal 的輸出,即您正在列印有效的 yaml 文檔,並且 yaml 沒有任何稱為「位元組撇號」的內容。在yaml 中,字串可以是不加引號雙引號,或單引號,無論如何,它們都是字符串。

# all three are strings 
a: foo bar
b: "foo bar"
c: 'foo bar'

所以你的原始輸出

some-example: '"some text"'

是完全有效的 yaml,增加單引號的不是 go,而是 ngopkg.in/yaml.v3 套件就是這樣做的。

afaict 無法為yaml.encoder 設定全域設定 使用雙引號樣式封送每個字串,但您可以使用實作yaml.marshaler 強制yaml.encoder 始終為該自訂類型的任何值輸出雙引號字串。

例如:

type doublequotedstring string

func (s doublequotedstring) marshalyaml() (interface{}, error) {
    return yaml.node{
        kind:  yaml.scalarnode,
        style: yaml.doublequotedstyle, // <- this is the relevant part
        value: string(s),
    }, nil
}

https://www.php.cn/link/99701e768d9a09b314e43a1d9e3e9dfa

some-example: "\"some text\""

以上是嘗試解析 yaml 時如何從字串句子中刪除撇號/位元組標記的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除