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
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 null reference.
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
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:
ValueNode stores a number, truth value, string or null. Public members:
Constructors ValueNode(double value), ValueNode(boolean value) and
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
Member functions isNumber(), isBoolean(), isString() and isNull() that
return truth values telling whether the stored value is of the corresponding type.
E.g. isString returns true if and only if the stored value is a string.
Member functions double getNumber(), boolean getBoolean() and String getString()
that return the value (which is assumed to be of the corresponding type). E.g. getNumber
returns a stored number as a double, and it is the responsibility of the caller to first
call isNumber to check that the value really can be returned as a number.
ArrayNode stores zero or more Node objects. Properties and public members:
Implements the interface Iterable<Node>.
A default constructor that initializes an empty array (no Node objects yet).
Member function void add(Node node) that adds Node to the end of the array.
void add(Node node)
Member function int size() that returns the number of stored Node objects.
ObjectNode that stores zero or more key-value pairs where keys are strings and values are
Node objects. 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 the Node object corresponding to
key (or null if it does not exits).
Node get(String key)
Member function void set(String key, Node node) that adds a key-value pair described by
void set(String key, Node node)
the parameters. A possible earlier value for the key will be overwritten.
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.
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:
java JsonTest 1 simple
java JsonTest 2 simple
java JsonTest 3 simple
java JsonTest 4 simple
java JsonTest 3 json
java JsonTest 4 json
"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.