YAML で文字列を複数行に分割するにはどうすればいいですか? 質問する

YAML で文字列を複数行に分割するにはどうすればいいですか? 質問する

非常に長い文字列があります:

Key: 'this is my very very very very very very long string'

複数の短い行で表現したいのですが、例えば、

Key: 'this is my very very very ' +
     'long string'

文字列内でエスケープする必要がないように、上記のように引用符を使用したいと思います。

ベストアンサー1

YAML で複数行の文字列を記述する方法は5、6、9 (または数え方によっては 63*) あり ます 。

要約

  • >ほとんどの場合に使用します。内部の改行は削除されますが、最後には改行が 1 つ追加されます。

      key: >
        Your long
        string here.
    
  • |改行をそのまま保持したい場合に使用します\n(たとえば、段落を含む埋め込みマークダウン)。

      key: |
        ### Heading
    
        * Bullet
        * Points
    
  • 最後に改行を追加したくない場合は、代わりに>-または を使用します。|-

  • "..."単語の途中で行を分割する必要がある場合、または改行を次のように文字通り入力したい場合に使用します\n

      key: "Antidisestab\
       lishmentarianism.\n\nGet on it."
    
  • YAML はクレイジーです。

ブロックスカラースタイル ( >|)

\これらは、エスケープせずにやなどの文字を許可し、文字列の末尾に"新しい行 ( ) を追加します。\n

> 折りたたみスタイル文字列内の単一の改行を削除します (ただし、末尾に 1 つ追加し、二重の改行を単一の改行に変換します)。

Key: >
  this is my very very very
  long string

this is my very very very long string\n

余分な先頭スペースが保持され、余分な改行が発生します。下記の注記を参照してください。

アドバイス: これを使用してください。通常、これが最適です。

| 文字通りのスタイル文字列内のすべての改行をリテラルの改行に変換し、最後に改行を追加します。

Key: |
  this is my very very very 
  long string

this is my very very very\nlong string\n

公式の定義は次のとおりです。YAML 仕様 1.2

スカラー コンテンツは、すべての改行が意味を持つリテラル スタイル (「|」で示される) を使用してブロック表記で記述できます。または、折り返しスタイル (「>」で示される) を使用して記述することもできます。このスタイルでは、各改行は、空行またはよりインデントされた行で終了しない限り、スペースに折り返されます。

アドバイス:フォーマットされたテキスト(特に Markdown) を値として挿入する場合はこれを使用します。

ブロック チョッピング インジケータ付きのブロック スタイル ( >-|->+|+)

\n\n文字列の最後の改行と末尾の空白行( )の処理を制御するには、ブロック噛みインジケーターキャラクター:

  • >, |: "clip": 改行を保持し、末尾の空白行を削除します。
  • >-, |-: "strip": 改行を削除し、末尾の空白行を削除します。
  • >+, |+: "keep": 改行を保持し、末尾の空白行を保持します。

「フロー」スカラースタイル ( 、、")'

これらにはエスケープが制限されており、改行文字のない単一行の文字列を構成します。キーと同じ行から開始することも、先頭に改行文字を追加して削除することもできます。改行文字が 2 つあると、1 つの改行文字になります。

プレーンスタイル(エスケープなし、 #またはの組み合わせなし、最初の文字に、またはその他の多くの句読点文字: は使用できません):"'

Key: this is my very very very 
  long string

アドバイス: 避けてください。便利そうに見えますが、誤って禁止されている句読点を使用して構文エラーを引き起こし、自ら足を撃つ可能性があります。

二重引用符スタイル(\および"は でエスケープする必要があり\、改行はリテラルシーケンスで挿入でき\n、行は末尾に を付けてスペースなしで連結できます\):

Key: "this is my very very \"very\" loooo\
  ng string.\n\nLove, YAML."

"this is my very very \"very\" loooong string.\n\nLove, YAML."

アドバイス: 非常に特殊な状況で使用してください。これは、スペースを追加せずに非常に長いトークン (URL など) を複数の行に分割できる唯一の方法です。また、行の途中で改行を追加すると便利な場合もあります。

一重引用符スタイル(リテラルは'二重にする必要があります。特殊文字は使用できません。二重引用符で始まる文字列を表現する場合に便利です):

Key: 'this is my very very "very"
  long string, isn''t it.'

"this is my very very \"very\" long string, isn't it."

アドバイス: 避けてください。メリットはほとんどなく、不便なことがほとんどです。

インデントインジケータ付きのブロックスタイル

上記だけでは不十分な場合は、「ブロックインデントインジケータ「(ブロックチョッピングインジケーターがある場合は、そのインジケーターの後に):

- >8
        My long string
        starts over here
- |+1
 This one
 starts here

注: 折り返しスタイルの先頭のスペース ( >)

Folded スタイルで最初の行以外の行の先頭に余分なスペースを挿入すると、そのスペースは保持され、ボーナスの改行が挿入されます。(これはフロー スタイルでは発生しません。)セクション6.5:

さらに、先頭に空白を含むテキスト行を囲む改行には折り返しは適用されません。このようにインデントされた行は、先頭に空白のみで構成される場合があることに注意してください。

- >
    my long
      string
                    
    many spaces above
- my long
      string
                    
    many spaces above
    

["my long\n string\n \nmany spaces above\n","my long string\nmany spaces above"]

まとめ

この表では、_は を意味しspace character\nが明記されている場合を除き、 は「改行文字」を意味します。 「先頭のスペース」とは、1 行目がスペースのみの場合 (インデントを確立する)、2 行目の追加のスペース文字を指します。

> | >- |- >+ |+ " '
スペース/改行は次のように変換されます:
末尾のスペース → _ _ _ _ _ _
リーディングスペース → \n_ \n_ \n_ \n_ \n_ \n_
単一の改行 → _ \n _ \n _ \n _ _ _
二重改行 → \n \n\n \n \n\n \n \n\n \n \n \n
最後の改行 → \n \n \n \n
最後の二重改行 → \n \n \n\n \n\n
リテラルを作成する方法:
一重引用符 ' ' ' ' ' ' ' ' ''
二重引用符 \"
バックスラッシュ \ \ \ \ \ \ \ \\ \
その他の機能
リテラル付きインライン改行\n �� �� �� �� �� �� �� ��
スペースなしの改行\ �� �� �� �� �� �� �� ��
#または: 価値 ��

キーと同じ行から開始できます
�� �� �� �� �� ��

「スペース」の前の行の末尾のスペースに注意してください。

- >
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- | 
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- "very \"long\"
  'string' with

  paragraph gap, \n and        
  s\
  p\
  a\
  c\
  e\
  s."
- 'very "long"
  ''string'' with

  paragraph gap, \n and        
  spaces.'
- >- 
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.

[
  "very \"long\" 'string' with\nparagraph gap, \\n and         spaces.\n", 
  "very \"long\"\n'string' with\n\nparagraph gap, \\n and        \nspaces.\n", 
  "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \\n and         spaces."
]

*2 つのブロック スタイル (それぞれ 2 つのブロック チョッピング インジケータ (またはなし) と 9 つのインデント インジケータ (またはなし))、1 つのプレーン スタイル、2 つの引用符付きスタイル: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63

この情報の一部は要約されている。ここ

おすすめ記事