2017-02-17 2 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? Я использую синтаксический анализатор JSON по умолчанию. Основная проблема, с которой я столкнулся, заключается в том, что я не могу использовать класс case для извлечения данных, поскольку все имена элементов не одинаковы в массиве элементов.

Этот формат подходит для меня, пожалуйста, перейдите по этой ссылке и вставьте JSON - https://konklone.io/json/. Любой код scala оценен. Я получаю ниже данные:

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

Идея - пересечь json и собрать все уникальные листья. Они будут представлять полную схему csv. В случае с элементами массива это зависит от вашего дизайна, но самый простой разворот - это может быть расширен до записей $ {array_size}, где набор полей, сплющенных [из каждого элемента массива], изменяется между взорванными записями и остальной частью json record (простые поля) одинаковы –

+0

Этот формат подходит для меня, пожалуйста, перейдите по этой ссылке и вставьте JSON - https://konklone.io/json/. Любой код scala оценен. Я получаю следующие данные: – Souvik

ответ

Смежные вопросы