I have currently the challenge to convert the following data:
{
"fieldname1": "value",
"fieldname3": [
"value 1",
[
[
"firstname",
"lastname"
]
]
],
"fieldname2": [
[
[
"value 3"
],
"full name"
]
]
}
into the following:
{
"fieldname1": "value",
"fieldname3": {
"field3_sub1": "value 1",
"field3_sub2": [
{
"field3_sub2_1": "firstname",
"field3_sub2_2": "lastname"
}
]
},
"fieldname2": [
{
"field2_sub1": [
"value 3"
],
"field2_sub2": "full name"
}
]
}
I'm currently a bit lost how I could convert the source data into the expected object.
I get the data from a sql query ( presto ).
The structured information ( fieldname2 and fieldname3 ) aren't resolved, I get only the values in the response.
The field position at root level is dynamic ( could be fieldname1, fieldname2, fieldname3 but also fieldname3, fieldname1, fieldname2).
The value position inside fieldname2 and fieldname3 seems to be static.
I already solved the challenge to convert the given table schema into a JSONSchema:
{
"type": "object",
"properties": {
"fieldname2": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field2_sub1": {
"type": "array",
"items": {
"type": "string"
}
},
"field2_sub2": {
"type": "string"
}
},
"additionalProperties": false,
"title": "fieldname2"
}
},
"fieldname1": {
"type": "string"
},
"fieldname3": {
"type": "object",
"properties": {
"field3_sub1": {
"type": "string"
},
"field3_sub2": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field3_sub2_1": {
"type": "string"
},
"field3_sub2_2": {
"type": "string"
},
},
"additionalProperties": false,
"title": "field3_sub2"
}
}
},
"additionalProperties": false,
"title": "fieldname3"
}
},
"additionalProperties": false
}
Based on the JSONSchema I was able to generate a "model definition" which will be used in a code generator:
{
"Fieldname2": {
"root": false,
"fields": {
"field2_sub1": {
"name": "field2_sub1",
"fieldType": "string[]",
"graphqlType": "[String]",
"nullable": true,
"filter": false
},
"field2_sub2": {
"name": "field2_sub2",
"fieldType": "string",
"graphqlType": "String",
"nullable": true,
"filter": true
}
}
},
"Field3_sub2": {
"root": false,
"fields": {
"field3_sub2_1": {
"name": "field3_sub2_1",
"fieldType": "string",
"graphqlType": "String",
"nullable": true,
"filter": true
},
"field3_sub2_2": {
"name": "field3_sub2_2",
"fieldType": "string",
"graphqlType": "String",
"nullable": true,
"filter": true
}
}
},
"Fieldname3": {
"root": false,
"fields": {
"field3_sub1": {
"name": "field3_sub1",
"fieldType": "string",
"graphqlType": "String",
"nullable": true,
"filter": true
},
"field3_sub2": {
"name": "field3_sub2",
"fieldType": "Field3_sub2[]",
"graphqlType": "[Field3_sub2]",
"nullable": true,
"filter": false
}
}
},
"Record": {
"root": true,
"fields": {
"fieldname2": {
"name": "fieldname2",
"fieldType": "Fieldname2[]",
"graphqlType": "[Fieldname2]",
"nullable": true,
"filter": false
},
"fieldname1": {
"name": "fieldname1",
"fieldType": "string",
"graphqlType": "String",
"nullable": true,
"filter": true
},
"fieldname3": {
"name": "fieldname3",
"fieldType": "Fieldname3",
"graphqlType": "Fieldname3",
"nullable": true,
"filter": false
}
}
}
}