Ниже мой формат 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)
Формат csv Требуется фиксированная схема, поэтому вам необходимо знать все возможные «сплющенные» дорожки в json: например, «copybook.item.storage-length», «copybook.item.item.storage-length» и все другие «листья», которые вы получите, когда поедете по дороге –
Идея - пересечь json и собрать все уникальные листья. Они будут представлять полную схему csv. В случае с элементами массива это зависит от вашего дизайна, но самый простой разворот - это может быть расширен до записей $ {array_size}, где набор полей, сплющенных [из каждого элемента массива], изменяется между взорванными записями и остальной частью json record (простые поля) одинаковы –
Этот формат подходит для меня, пожалуйста, перейдите по этой ссылке и вставьте JSON - https://konklone.io/json/. Любой код scala оценен. Я получаю следующие данные: – Souvik