Tracks
/
Ballerina
Ballerina
/
Übungen
/
JSON-Kraftstoffpauschale
JSON-Kraftstoffpauschale

JSON-Kraftstoffpauschale

Mittel

Anleitung

Problemstellung

Jeder Mitarbeiter von ABC Corp erhält eine unbegrenzte Kraftstoffpauschale. Die Mitarbeiter müssen jedes Mal, wenn sie ihr Fahrzeug tanken, einen Datensatz einsenden. Diese Datensätze werden an dieselbe JSON-Datei angehängt und am Monatsende verarbeitet.

Als Mitglied des Teams für den digitalen Betrieb ist es deine Aufgabe, diese JSON-Datei zu lesen und die Ergebnisse in eine andere JSON-Datei zu schreiben. Die Ausgabedatei sollte für jeden Mitarbeiter einen Eintrag mit den folgenden Details enthalten:

  • Mitarbeiternummer
  • Anzahl der Tankvorgänge
  • Gesamtkosten für Kraftstoff
  • Gallonen insgesamt
  • Insgesamt gefahrene Meilen

Du erhältst zwei Argumente des Typs string.

  1. Pfad zur JSON-Eingabedatei.
  2. Pfad zur JSON-Ausgabedatei.

Die JSON-Eingabedatei enthält ein Array von JSON-Objekten. Jedes JSON-Objekt hat die folgende Form.

{
    "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;
|};

Deine Aufgabe ist es, die JSON-Eingabe in das folgende JSON-Format umzuwandeln und den Inhalt in den angegebenen Pfad zu schreiben. Die Ausgabedatei sollte für jeden Mitarbeiter einen Eintrag enthalten, aufsteigend sortiert nach 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;
|};

Einschränkungen

  • Anzahl der Tankdatensätze n in der JSON-Eingabedatei: 0 <= n <= 1000
  • Anzahl der Mitarbeiter im Unternehmen: 97
  • Der Kraftstoffpreis gilt pro Gallone
  • Keine fehlenden Tankdatensätze

Beispiel 1

  • Eingabe: example01_input.json
[
    {
        "employeeId": 2312,
        "odometerReading": 230,
        "gallons": 18.561,
        "gasPrice": 4.56
    },
    {
        "employeeId": 2312,
        "odometerReading": 500,
        "gallons": 19.345,
        "gasPrice": 4.89
    }
]
  • Ausgabe: example01_output.json
[
    {
        "employeeId": 2312,
        "gasFillUpCount": 2,
        "totalFuelCost": 179.23521,
        "totalGallons": 37.906,
        "totalMilesAccrued": 270
    }
]

Beispiel 2

  • Eingabe: 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
    }
]

  • Ausgabe: 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
    }
]

Hinweise

   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);
  • Verwende Funktionen mit Ausdruckskörper für Funktionen mit einem einzigen Ausdruck. Zum Beispiel Funktionen, die nur die return-Anweisung enthalten.
   function cfr(int deaths, int cases) returns decimal => <decimal>deaths / <decimal>cases * 100;
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Ballerina Exercism

Bereit, mit JSON-Kraftstoffpauschale zu starten?

Melde dich bei Exercism an, um Ballerina mit 60 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.