Heim  >  Artikel  >  Backend-Entwicklung  >  So entfernen Sie Apostrophe/Byte-Markierungen aus Zeichenfolgensätzen, wenn Sie versuchen, Yaml zu analysieren

So entfernen Sie Apostrophe/Byte-Markierungen aus Zeichenfolgensätzen, wenn Sie versuchen, Yaml zu analysieren

WBOY
WBOYnach vorne
2024-02-05 22:45:111152Durchsuche

"尝试解析

Frageninhalt

Hier ist ein Beispiel

Die Yaml-Parsing-Bibliothek scheint nicht in der Lage zu sein, zu drucken" Wenn ich also einen Satz mit " 解析一个句子时,go 在它周围添加字节撇号 (' analysiere, fügt go Byte-Apostrophe (')

darum herum hinzu

Gibt es einen Trick, um eine einfache Zeichenfolge/Zeichenfolge in Anführungszeichen zu drucken/zu erstellen, ohne Byte-Apostrophe hinzuzufügen?

Beispielcode:

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))
}

Drucken some-example: '"some text"'

Möchten Siesome-example:“一些文本”


Richtige Antwort


Gibt es einen Trick, um eine einfache Zeichenfolge/Zeichenfolge in Anführungszeichen zu drucken/zu erstellen, ohne Byte-Apostrophe hinzuzufügen?

Bitte beachten Sie, dass Sie die Ausgabe von yaml.marshal drucken, d. h. Sie drucken ein gültiges Yaml-Dokument und das Yaml enthält keine sogenannten „Byte-Apostrophe“. In Yaml kann eine Zeichenfolge ohne Anführungszeichen, doppelte Anführungszeichen oder einfache Anführungszeichen sein, egal was passiert, es sind alles Zeichenfolgen.

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

Also Ihre Originalausgabe

some-example: '"some text"'

ist vollkommen gültiges Yaml, es ist nicht go, das die einfachen Anführungszeichen hinzufügt, sondern das ngopkg.in/yaml.v3-Paket, das dies tut.

afaict Es gibt keine Möglichkeit, globale Einstellungen für yaml.encoder yaml.encoder 设置全局设置 使用双引号样式封送每个字符串,但是您可以使用实现 yaml.marshaler 强制 yaml.encoder festzulegen, um jede Zeichenfolge mit doppelten Anführungszeichen zu marsalieren, aber Sie können die Implementierung yaml.marshaler

Zwingt yaml.encoder, immer für jeden Wert dieses benutzerdefinierten Typs Double auszugeben Zeichenfolge in Anführungszeichen.

Zum Beispiel:

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\""

Das obige ist der detaillierte Inhalt vonSo entfernen Sie Apostrophe/Byte-Markierungen aus Zeichenfolgensätzen, wenn Sie versuchen, Yaml zu analysieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen