YAML相当于JSON中的对象数组

时间:2015-11-29 23:59:49

标签: arrays json types yaml

我有一个JSON数组对象,我正在尝试将其转换为YAML。

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

3 个答案:

答案 0 :(得分:216)

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

我们在数组(序列)中有两个:

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

您可以看到它(并以交互方式编辑)here

答案 1 :(得分:3)

上面的好答案。另一种方法是使用很棒的yaml jq包装器工具,位于https://github.com/kislyuk/yq

的yq

将JSON示例保存到文件中,例如ex.json,然后

yq -y '.' ex.json

AAPL:
- shares: -75.088
  date: 11/27/2015
- shares: 75.088
  date: 11/26/2015

答案 2 :(得分:2)

如果狭窄的间距困扰您,要补充已接受的答案,您还可以这样做:

AAPL:
  - 
    shares: -75.088
    date: 11/27/2015
  - 
    shares: 75.088
    date: 11/26/2015

...这是直接改编自 YAML 规范的示例 2.4。