2017-02-17 19 views
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) 
+0

csvフォーマットでは、固定スキーマが必要です。したがって、jsonの可能なすべての「平坦化された」パスを知る必要があります。たとえば、「copybook.item.storage-length」、「copybook.item.item.storage-length」およびすべてあなたが道を横切ったときに得られる他の「葉」 –

+0

アイデアは、ジェソンを横切り、すべてのユニークな葉を集めることです。それらはcsvフルスキーマを表します。配列アイテムの場合、それはあなたのデザインに左右されますが、最も単純なunwrapです - これは$ {array_size}レコードに展開され、各配列アイテムからフラット化されたフィールドのセットは分解されたレコード間で変化します。 jsonレコード(プレーンフィールド)は同じです –

+0

このフォーマットは問題ありません。このリンクをたどってJSON - https://konklone.io/json/を貼り付けてください。任意のスカラコードが評価されます。私は以下のデータを取得しています: – Souvik

答えて