⌛⌛⌛ JSON¶
Place your code into files named Node.java (a template is provided for it), ArrayNode.java,
ObjectNode.java and ValueNode.java in the directory Round6/json. Remember to pull
student_template_project for material.
In this task you will implement a simple class hierarchy for creating JSON data. If you are not yet familiar with JSON, it is high time to learn about it e.g. from Wikipedia.
JSON data consists of following types of data items:
Numbero. In this task type
double.Truth value. In this task type
boolean.String. In this task type
String.Null. In this task the
nullreference.Array. An ordered list that may contain zero or more JSON data items.
Object. A dictionary type structure that may contain zero or more key-item pairs. The keys are strings.
The readily provided Node.java contains an abstract class Node that acts as the common
sypertype of JSON data items. You need to implement classes ValueNode, ArrayNode and
ObjectNode that inherit Node and are otherwise as follows:
ValueNodestores a number, truth value, string ornull. Public members:Constructors
ValueNode(double value),ValueNode(boolean value)andValueNode(String value).Initialize the object to store the value of one of the accepted types. Note that the last constructor allows also to store
null(which could not be specified as a primitive value).
Member functions
isNumber(),isBoolean(),isString()andisNull()that return truth values telling whether the stored value is of the corresponding type. E.g.isStringreturnstrueif and only if the stored value is a string.Member functions
double getNumber(),boolean getBoolean()andString getString()that return the value (which is assumed to be of the corresponding type). E.g.getNumberreturns a stored number as adouble, and it is the responsibility of the caller to first callisNumberto check that the value really can be returned as a number.
ArrayNodestores zero or moreNodeobjects. Properties and public members:Implements the interface
Iterable<Node>.A default constructor that initializes an empty array (no
Nodeobjects yet).Member function
void add(Node node)that addsNodeto the end of the array.Member function
int size()that returns the number of storedNodeobjects.
ObjectNodethat stores zero or more key-value pairs where keys are strings and values areNodeobjects. Properties and public members:Implements the interface
Iterable<String>.Iterates over the keys of the stored key-value pairs in natural sorted order of
String.
A default constructor that initializes an empty JSON object (has no key-value pairs yet).
Member function
Node get(String key)that returns theNodeobject corresponding tokey(ornullif it does not exits).Member function
void set(String key, Node node)that adds a key-value pair described bythe parameters. A possible earlier value for the key will be overwritten.
Member function
int size()that returns the number of storedNodeobjects.
The implementations of ArrayNode and ObjectNode can be extremely simple if you use Java
containers in a wise manner.
The class Node contains a function printSimple that prints a crude description of the JSON
data represented by the Node object it receives as a parameter. The class also contains a
function printJson that does not have a proper implementation. You may receive up to 30 points
if you implement printJson in such manner that it prints out a “nice” JSON data representation.
If you skip this part, you may receive up to 20 points. See the example outputs for details about
what kind of output printJson should produce.
The class Node also already provides functions isValue, isArray and isObject for
inspecting the Node type.
Testing¶
You may test your implementation by using the test program given in the file JsonTest.java and
the example output given in the files output1.txt, output2.txt, output3.txt,
output4.txt, output5.txt and output6.txt. Place these files to the same
directory with your code, compile the test program e.g. as javac *.java, and run the tests as
java JsonTest 1 simple, java JsonTest 2 simple, java JsonTest 3 simple,
java JsonTest 4 simple, java JsonTest 3 json and java JsonTest 4 json. The expected
outputs of these six tests are given in the files output1.txt, output2.txt,
output3.txt, output4.txt, output5.txt and output6.txt. The first four tests use
printSimple and the last two tests use printJson. If you implement printJson, see the
last two example output files for details about the expected output format. Below is also an
example of how printJson would print the JSON data of the second test:
{
"address": {
"city": "Tampere",
"country": "Finland"
},
"faculties": [
{
"name": "Faculty of Built Environment"
},
{
"name": "Faculty of Education and Culture"
},
{
"name": "Faculty of Engineering and Natural Sciences"
},
{
"name": "Faculty of Information Technology and Communication Sciences"
},
{
"name": "Faculty of Management and Business"
},
{
"name": "Faculty of Medicine and Health Technology"
},
{
"name": "Faculty of Social Sciences"
}
],
"name": "Tampere University"
}
A+ presents the exercise submission form here.