web-dev-qa-db-ja.com

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

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

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

YAMLにはJSONだけではない同等の表現がありますか?私は何かをしたいのですが

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
  }
104
wegry

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

あなたはそれを見ることができます(そしてそれを対話的に編集します) ここで

219
Jordan Running

上の素晴らしい答え。もう一つの方法は、yamですばらしいyaml jqラッパーツールを使うことです https://github.com/kislyuk/yq

JSONの例をex.jsonというファイルに保存してから

yq -y '.' ex.json

AAPL:
- shares: -75.088
  date: 11/27/2015
- shares: 75.088
  date: 11/26/2015
3
Jon Scobie