JSONのオブジェクトの配列に相当するYAML


193

YAMLに変換しようとしているオブジェクトのJSON配列があります。

{"AAPL": [
  {
    "shares": -75.088,
    "date": "11/27/2015"
  },
  {
    "shares": 75.088,
    "date": "11/26/2015"
  },
]}

JSONだけではない同等の表現がYAMLにありますか?次のようなことをしたい

AAPL:
  - :
    shares: -75.088
    date: 11/27/2015
  - :
    shares: 75.088
    date: 11/26/2015

しかし、私が思いついた最もきれいなことは

AAPL:
  - {
    shares: -75.088,
    date: 11/27/2015
  }
  {
    shares: 75.088,
    date: 11/26/2015
  }

回答:


367

TL; DR

あなたはこれを求めている:

AAPL:
  - shares: -75.088
    date: 11/27/2015
  - shares: 75.088
    date: 11/26/2015

マッピング

JSONオブジェクトに相当するYAMLは、次のようなマッピングです。

# flow style
{ foo: 1, bar: 2 }
# block style
foo: 1
bar: 2

ブロックマッピングのキーの最初の文字は同じ列にある必要があることに注意してください。実証するには:

# OK
   foo: 1
   bar: 2
# Parse error
   foo: 1
    bar: 2

シーケンス

YAMLのJSON配列に相当するのはシーケンスで、次のいずれかに似ています(同等です)。

# flow style
[ foo bar, baz ]
# block style
- foo bar
- baz

ブロックシーケンスでは、-sは同じ列になければなりません。

JSONからYAML

JSONをYAMLに変換しましょう。JSONは次のとおりです。

{"AAPL": [
  {
    "shares": -75.088,
    "date": "11/27/2015"
  },
  {
    "shares": 75.088,
    "date": "11/26/2015"
  },
]}

雑学のポイントとして、YAMLはJSONのスーパーセットであるため、上記はすでに有効なYAMLですが、実際にYAMLの機能を使用してこの見栄えを良くしましょう。

内側から始めて、次のようなオブジェクトがあります。

{
  "shares": -75.088,
  "date": "11/27/2015"
}

同等のYAMLマッピングは次のとおりです。

shares: -75.088
date: 11/27/2015

これらの2つが配列(シーケンス)にあります。

- shares: -75.088
  date: 11/27/2015
- shares: 75.088
  date: 11/26/2015

-sとマッピングキーの最初の文字の並び方に注意してください。

最後に、このシーケンスはそれ自体がキーを持つマッピングの値ですAAPL

AAPL:
  - shares: -75.088
    date: 11/27/2015
  - shares: 75.088
    date: 11/26/2015

これを解析してJSONに戻すと、期待どおりの結果が得られます。

{
  "AAPL": [
    {
      "date": "11/27/2015", 
      "shares": -75.088
    }, 
    {
      "date": "11/26/2015", 
      "shares": 75.088
    }
  ]
}

あなたはそれをここで見ることができます(そしてそれをインタラクティブに編集します)。


シェアと日付のペアを含むリストに複数のアイテムがあることを反映するように質問を更新しました。
wegry 2015年

3
@wegry:違いはありません。YAMLウェブサイトの例もご覧ください:yaml.org/start.html
Felix Kling、2015年

5

上記の素晴らしい答え。もう1つの方法は、https: //github.com/kislyuk/yqにある優れたyaml jqラッパーツールyqを使用することです

JSONの例をファイルに保存します(例:ex.json)。

yq -y '.' ex.json

AAPL:
- shares: -75.088
  date: 11/27/2015
- shares: 75.088
  date: 11/26/2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.