私は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
}
あなたはこれを求めている:
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です:
{"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
}
]
}
あなたはそれを見ることができます(そしてそれを対話的に編集します) ここで 。
上の素晴らしい答え。もう一つの方法は、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