JSON中对象数组的YAML等价物

7d7tgy0s  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(59)

我有一个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
  }

pjngdqdw

pjngdqdw1#

TL;DR

你想要这个:

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

字符串

Map

JSON对象的YAML等价物是一个Map,看起来像这样:

# flow style
{ foo: 1, bar: 2 }
# block style
foo: 1
bar: 2

的数据
请注意,块Map中键的第一个字符必须在同一列中。

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


等价的YAMLMap是:

shares: -75.088
date: 11/27/2015


我们有两个这样的数组(序列):

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


注意- s和Map键的第一个字符是如何排列的。
最后,这个序列本身就是一个键为AAPL的Map中的值:

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>


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

cunj1qz1

cunj1qz12#

为了补充公认的答案,如果紧凑的间距困扰你,你也可以这样做:

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

字符串
.这直接改编自YAML规范的示例2.4“Map序列”。

d7v8vwbk

d7v8vwbk3#

另一种方法是使用很棒的yaml jq Package 器工具,yq at 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

字符串

相关问题