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>
見ることができます(そしてインタラクティブに編集することもできます)ここ。