PowerShellを使用してJSONをYAMLに変換する


1

このようなJSONデータがあります。

sample.json

[
  {
    "id": 0,
    "name": "Cofine",
    "title": "laboris minim qui nisi esse amet non",
    "description": "Consequat laborum quis exercitation culpa. Culpa esse sint consectetur deserunt non.",
    "website": "cofine.com",
    "image": "http://placehold.it/32x32",
    "labels": ["blue", "red"],
    "labels_link": ["http://cofine.com/labels/blue","http://cofine.com/labels/red"],
  },
  {
    "id": 1,
    "name": "Zomboid",
    "title": "adipisicing mollit esse aliquip ullamco nisi laboris",
    "description": "Enim consectetur eu commodo officia. Id pariatur proident nostrud occaecat adipisicing voluptate do nisi incididunt id ex commodo.",
    "website": "zomboid.com",
    "image": "http://placehold.it/32x32",
    "labels": ["red"],
    "labels_link": ["http://zomboid.com/labels/red"],
  },
  {
    "id": 2,
    "name": "Sulfax",
    "title": "non minim anim irure nulla ad elit",
    "description": "Pariatur anim officia adipisicing Lorem dolor cillum eu ex veniam sint consequat incididunt. Minim mollit reprehenderit mollit sint laboris consequat.",
    "website": "sulfax.com",
    "image": "http://placehold.it/32x32",
    "labels": ["green", "yellow", "blue"],
    "labels_link": ["http://sulfax.com/labels/green","http://sulfax.com/labels/yellow","http://sulfax.com/labels/blue"],
  }
]

PowerShellを使用してこのjsonデータをyamlに変換するにはどうすればよいですか?各jsonオブジェクトはyamlに変換され、ファイル名がタイトルキープロパティの値である独自のファイルにyamlとして保存されますか?

次のコマンドを実行すると($json | ConvertFrom-Json) | ConvertTo-YAMLConvertTo-YAML関数はsimpletalk Webサイトから取得されます)、これが出力されます。

出力

---

 id: 0 
 name: 'Cofine' 
 title: 'laboris minim qui nisi esse amet non' 
 description:     Consequat laborum quis exercitation culpa. Culpa esse sint consectetur deserunt     non. 
 website: 'cofine.com' 
 image: 'http://placehold.it/32x32' 
 labels: 
    - 'blue' 
    - 'red' 
 labels_link: 
    - 'http://cofine.com/labels/blue' 
    - 'http://cofine.com/labels/red'
---

 id: 1 
 name: 'Zomboid' 
 title: 'adipisicing mollit esse aliquip ullamco nisi laboris' 
 description:     Enim consectetur eu commodo officia. Id pariatur proident nostrud occaecat adipisicing     voluptate do nisi incididunt id ex commodo. 
 website: 'zomboid.com' 
 image: 'http://placehold.it/32x32' 
 labels: 
    - 'red' 
 labels_link: 
    - 'http://zomboid.com/labels/red'
---

 id: 2 
 name: 'Sulfax' 
 title: 'non minim anim irure nulla ad elit' 
 description:     Pariatur anim officia adipisicing Lorem dolor cillum eu ex veniam sint consequat     incididunt. Minim mollit reprehenderit mollit sint laboris consequat. 
 website: 'sulfax.com' 
 image: 'http://placehold.it/32x32' 
 labels: 
    - 'green' 
    - 'yellow' 
    - 'blue' 
 labels_link: 
    - 'http://sulfax.com/labels/green' 
    - 'http://sulfax.com/labels/yellow' 
    - 'http://sulfax.com/labels/blue'

ただし、私が探している出力は次のようになります。ファイル名はタイトルキープロパティの値で、ファイルのコンテンツはyamlに変換された対応するjsonオブジェクトです。

Laboris minim qui nisi esse amet non.yaml

---
 id: 0 
 name: 'Cofine' 
 title: 'laboris minim qui nisi esse amet non' 
 description: Consequat laborum quis exercitation culpa. Culpa esse sint consectetur deserunt non.
 website: 'cofine.com' 
 image: 'http://placehold.it/32x32' 
 labels: 
    - 'blue' 
    - 'red' 
 labels_link: 
    - 'http://cofine.com/labels/blue' 
    - 'http://cofine.com/labels/red'
---

脂肪質のmollit esse aliquip ullamco nisi Laboris.yaml

---
 id: 1 
 name: 'Zomboid' 
 title: 'adipisicing mollit esse aliquip ullamco nisi laboris' 
 description: Enim consectetur eu commodo officia. Id pariatur proident nostrud occaecat adipisicing voluptate do nisi incididunt id ex commodo.
 website: 'zomboid.com' 
 image: 'http://placehold.it/32x32' 
 labels: 
    - 'red' 
 labels_link: 
    - 'http://zomboid.com/labels/red'
---

ノンミニムアニメーションイルレヌッラad elit.yaml

---
 id: 2 
 name: 'Sulfax' 
 title: 'non minim anim irure nulla ad elit' 
 description: Pariatur anim officia adipisicing Lorem dolor cillum eu ex veniam sint consequat incididunt. Minim mollit reprehenderit mollit sint laboris consequat.
 website: 'sulfax.com' 
 image: 'http://placehold.it/32x32' 
 labels: 
    - 'green' 
    - 'yellow' 
    - 'blue' 
 labels_link: 
    - 'http://sulfax.com/labels/green' 
    - 'http://sulfax.com/labels/yellow' 
    - 'http://sulfax.com/labels/blue'
---

これを読みましたか?simple-talk.com/sysadmin/powershell/...
SadBunny

ええ@SadBunny、私が持っている
イシャン

それはあなたの正確な目的のために完全に実装されているようです。番号?
SadBunny

@SadBunny、いいえ、その記事は私が望んでいることを正確には行いません。更新された質問をご覧ください。
イシャン

まあ、それは確かに非常に特定の機能です...では、ファイル名が特定のキーの値に依存する1つ以上のファイルに着信データを分割したいですか?つまり、それを行うには現在のコードを適応させる必要があります。方法がわからない場合は、スタックオーバーフローのためにコードを投稿し、機能に合わせてコードを変更するための支援を求めることをお勧めします。おそらくそれほど難しくはありません。YAMLオブジェクトを分割してループ処理し、値を取得してから保存する必要があります。可能なショートカットは、全体の結果に対する大規模な正規表現の検索と置換です。
SadBunny

回答:


2

他の誰かが答えを探している場合に備えて、私は自分の質問に答えています。

$obj = ($json  | ConvertFrom-Json)

ForEach($item in $obj) {
    $filename = "$($item.title).yaml"
    $item | ConvertTo-YAML > $filename
    "---" >> $filename
}

それはかなり甘いです:)いい仕事。
-SadBunny
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.