1
を使用してアイデアJSONの解析をしたい私のJSON形式です:以下はScalaの
{"copybook": {
"item": {
"storage-length": 1652,
"item": [
{
"storage-length": 40,
"level": "05",
"name": "OBJECT-NAME",
"display-length": 40,
"position": 1,
"picture": "X(40)"
},
{
"storage-length": 8,
"occurs-min": 0,
"level": "05",
"name": "C-TCRMANKEYBOBJ-OFFSET",
"numeric": true,
"display-length": 8,
"position": 861,
"occurs": 99,
"depending-on": "C-TCRMANKEYBOBJ-COUNT",
"picture": "9(8)"
}
],
"level": "01",
"name": "TCRMCONTRACTBOBJ",
"display-length": 1652,
"position": 1
},
"filename": "test.cbl"
}}
どのように私は、このJSONを解析し、CSV形式に変換することができますか?私はScalaのデフォルトのJSONパーサーを使用しています。私が直面している主な問題は、すべての項目名が項目配列内で同じではないため、データを抽出するためにケースクラスを使用できないことです。
このフォーマットは問題ありません。このリンクをたどってJSON - https://konklone.io/json/を貼り付けてください。任意のスカラコードが評価されます。私は以下のデータを取得しています:
implicit val formats = DefaultFormats
val json2 = parse(jsonString, false) \\ "item"
val list = json2.values.asInstanceOf[List[Map[String, String]]]
for (obj <- list) {
//println(obj.keys)
//obj.values
println (obj.toList.mkString(","))
}
(name,OBJECT-NAME),(storage-length,40),(picture,X(40)),(position,1),(display-length,40),(level,05)
(name,C-TCRMANKEYBOBJ-OFFSET),(storage-length,8),(occurs-min,0),(occurs,99),(picture,9(8)),(position,861),(numeric,true),(depending-on,C-TCRMANKEYBOBJ-COUNT),(display-length,8),(level,05)
csvフォーマットでは、固定スキーマが必要です。したがって、jsonの可能なすべての「平坦化された」パスを知る必要があります。たとえば、「copybook.item.storage-length」、「copybook.item.item.storage-length」およびすべてあなたが道を横切ったときに得られる他の「葉」 –
アイデアは、ジェソンを横切り、すべてのユニークな葉を集めることです。それらはcsvフルスキーマを表します。配列アイテムの場合、それはあなたのデザインに左右されますが、最も単純なunwrapです - これは$ {array_size}レコードに展開され、各配列アイテムからフラット化されたフィールドのセットは分解されたレコード間で変化します。 jsonレコード(プレーンフィールド)は同じです –
このフォーマットは問題ありません。このリンクをたどってJSON - https://konklone.io/json/を貼り付けてください。任意のスカラコードが評価されます。私は以下のデータを取得しています: – Souvik