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



답변

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

여기에서 볼 수 있고 대화식으로 편집 할 수 있습니다 .


답변

위의 큰 답변. 또 다른 방법은 https://github.com/kislyuk/yq 에서 훌륭한 yaml jq 래퍼 도구 yq를 사용하는 것입니다

JSON 예제를 파일 (예 : ex.json)에 저장 한 다음

yq -y '.' ex.json

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


답변