1. ホーム

[解決済み】JSONのオブジェクトの配列をYAMLで表現したもの

2022-03-31 07:34:09

質問

オブジェクトのJSON配列を持っていて、YAMLに変換しようとしています。

{"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
  }

解決方法は?

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

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

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

このように - が並び、マッピングキーの最初の文字が並びます。

最後に、この配列はそれ自体がマッピングの値であり、そのキーは 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
    }
  ]
}

見ることができます(インタラクティブに編集することも可能です) こちら .