JSON files
As for XML, Jolie natively supports automatic conversions also between Jolie and JSON data structures.
This is leveraged by the File
library service to give simple ways to read from and write to JSON files.
Reading from a JSON file
Say that you have a JSON file called note.json
with the following content.
{
"note": {
"sender": "John",
"receiver": "Jane",
"content": "I made pasta"
}
}
You can read from this file and obtain a Jolie data structure as follows.
from file import File
service Example {
embed File as File
main
{
readFile@File( {
filename = "note.json"
format = "json"
} )( data )
// data is now { node << { sender = "John" receiver = "Jane" content = "I made pasta" } }
}
}
Variable data
now contains the data from the JSON structure, which you can access as usual using the standard Jolie syntax. For example, to print the to
node of the note, you can include "console.iol"
at the beginning of the program and write:
println@Console( data.note.to )() // "Jane"
Writing to a JSON file
Suppose that you wanted to store the following data structure as a JSON file.
{
note << {
sender = "John"
receiver = "Jane"
content = "I made pasta"
}
}
You can do so by invoking writeFile@File
and passing that data structure as the content
to be written.
from file import File
service Example {
embed File as File
main
{
writeFile@File( {
filename = "note.json"
format = "json"
content << {
note << {
sender = "John"
receiver = "Jane"
content = "I made pasta"
}
}
} )()
}
}
The file note.json
will now contain the JSON data that we showed at the beginning of the tutorial.
Another example
Let us consider to have a starting json file, named file.json
like the following one:
{
"module": [
{
"moduleId": "ONE",
"moduleName": "ONE",
"moduleOverview": "ONE"
},
{
"moduleId": "TWO",
"moduleName": "TWO",
"moduleOverview": "TWO"
}
]
}
The need is to add one more module item to the file. In the following example a jolie script just reads the file and add a new item module, then it writes the result on the same file.
from file import File
service ManagingJsonFiles {
embed File as File
main {
readFile@File( { filename = "file.json", format = "json" } )( starting_json )
starting_json.module[ #starting_json.module ] << {
moduleId = "NEW"
moduleName = "NEW"
moduleOverview = "NEW"
}
writeFile@File({ filename = "file.json", format = "json", content << starting_json } )()
}
}
It is worth noting that readFile
and writeFile
are two operations offered by standard library File
. The standard library has been imported at the first line from file import File
, then it is embedded at line four embed File as File
.
The final json file appears like the following one.
{
"module": [
{
"moduleOverview": "ONE",
"moduleName": "ONE",
"moduleId": "ONE"
},
{
"moduleOverview": "TWO",
"moduleName": "TWO",
"moduleId": "TWO"
},
{
"moduleOverview": "NEW",
"moduleName": "NEW",
"moduleId": "NEW"
}
]
}
The complete example may be consulted at this link.