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

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

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
  }

ベストアンサー1

要約

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

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

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

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 に変換すると、期待どおりの結果が得られます。

console.log(jsyaml.load(`
AAPL:
  - shares: -75.088
    date: 11/27/2015
  - shares: 75.088
    date: 11/26/2015
`));
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js"></script>

見ることができます(そしてインタラクティブに編集することもできます)ここ

おすすめ記事