Todos los empleados de ABC Corp reciben una asignación de combustible ilimitada. Los empleados deben enviar un registro cada vez que repostan sus vehículos. Estos registros se añaden al mismo archivo JSON y se procesan al final del mes.
Como miembro del equipo de operaciones digitales, tu tarea consiste en leer este archivo JSON y escribir los resultados en otro archivo JSON. El archivo de salida debe contener una entrada por cada empleado con los siguientes datos:
Recibes dos argumentos de tipo string.
El archivo JSON de entrada contiene un array de objetos JSON. Cada objeto JSON tiene la siguiente forma.
{
"type": "array",
"items": {
"type": "object",
"properties": {
"employeeId": {
"type": "integer"
},
"odometerReading": {
"type": "integer"
},
"gallons": {
"type": "number"
},
"gasPrice": {
"type": "number"
}
},
"required": [
"employeeId",
"odometerReading",
"gallons",
"gasPrice"
]
}
}
// Ballerina record type definition
type FillUpEntry record {|
int employeeId;
int odometerReading;
decimal gallons;
decimal gasPrice;
|};
Tu tarea consiste en transformar la entrada JSON al siguiente formato JSON y escribir el contenido en la ruta indicada. El archivo de salida debe contener una entrada por cada empleado, ordenadas de forma ascendente por employeeId.
{
"type": "array",
"items": {
"type": "object",
"properties": {
"employeeId": {
"type": "integer"
},
"gasFillUpCount": {
"type": "integer"
},
"totalFuelCost": {
"type": "number"
},
"totalGallons": {
"type": "number"
},
"totalMilesAccrued": {
"type": "integer"
}
},
"required": [
"employeeId",
"gasFillUpCount",
"totalFuelCost",
"totalGallons",
"totalMilesAccrued"
]
}
}
// Ballerina record type definition
type EmployeeFillUpSummary record {|
int employeeId;
int gasFillUpCount;
decimal totalFuelCost;
decimal totalGallons;
int totalMilesAccrued;
|};
n en el archivo JSON de entrada: 0 <= n <= 1000example01_input.json
[
{
"employeeId": 2312,
"odometerReading": 230,
"gallons": 18.561,
"gasPrice": 4.56
},
{
"employeeId": 2312,
"odometerReading": 500,
"gallons": 19.345,
"gasPrice": 4.89
}
]
example01_output.json
[
{
"employeeId": 2312,
"gasFillUpCount": 2,
"totalFuelCost": 179.23521,
"totalGallons": 37.906,
"totalMilesAccrued": 270
}
]
example02_input.json
[
{
"employeeId": 2413,
"odometerReading": 4089,
"gallons": 21.682,
"gasPrice": 3.46
},
{
"employeeId": 3423,
"odometerReading": 6582,
"gallons": 15.248,
"gasPrice": 4.56
},
{
"employeeId": 2413,
"odometerReading": 4127,
"gallons": 4.221,
"gasPrice": 3.40
},
{
"employeeId": 2413,
"odometerReading": 4349,
"gallons": 11.192,
"gasPrice": 4.10
},
{
"employeeId": 3423,
"odometerReading": 6767,
"gallons": 8.696,
"gasPrice": 3.34
},
{
"employeeId": 2413,
"odometerReading": 4547,
"gallons": 9.197,
"gasPrice": 2.90
}
]
example02_output.json
[
{
"employeeId": 2413,
"gasFillUpCount": 4,
"totalFuelCost": 161.92962,
"totalGallons": 46.292,
"totalMilesAccrued": 458
},
{
"employeeId": 3423,
"gasFillUpCount": 2,
"totalFuelCost": 98.57552,
"totalGallons": 23.944,
"totalMilesAccrued": 185
}
]
ballerina/io para leer y escribir archivos JSON. json jsonPayload = {id: "2", title: "Jeru", artist: "Gerry Mulligan", price: 17.99};
// Using cloneWithType
Album album1 = check jsonPayload.cloneWithType();
io:println(album1);
// Using fromJsonWithType
Album album2 = check jsonPayload.fromJsonWithType();
io:println(album2);
Album {id, title, artist, price} = album1;
io:println(id);
io:println(title);
function cfr(int deaths, int cases) returns decimal => <decimal>deaths / <decimal>cases * 100;
Regístrate en Exercism para aprender y dominar Ballerina con 60 ejercicios y mentoría humana real, todo gratis.