Class | Description |
---|---|
JsonObj |
Represents a JSON object.
|
JsonParser |
Simple JSON parser.
|
Node |
Base class of all nodes a JSON tree consists of.
|
NodeArray |
Node representing an array of values.
|
NodeElements |
Holds the elements of a NodeArray.
|
NodeFalse |
Represents the terminal symbol "false".
|
NodeMembers |
This node class represents the members (i. e. the pairs) of a JSON object.
|
NodeNull |
Represents the terminal symbol "null".
|
NodeNumber |
Represents a number in a JSON object.
|
NodeObj |
Represents a whole JSON object, i. e. its members, i. e. a list of pairs
consisting out of a label and a value.
|
NodePair |
Represents a pair consisting of a label and a value.
|
NodeString |
Represents a JSON String.
|
NodeTrue |
Represents the terminal symbol "true".
|
NodeValue |
This class represents a JSON value.
|
Exception | Description |
---|---|
ParseErrorEx |
This exception is thrown when the JSON parser detects a parse error.
|
String
to the constructor of the JsonObj
class. Example: String s = "{" +
"\"name\" : \"Mike\"," +
"\"age\" : 23," +
"\"hobbies\" : [ \"fishing\", \"rugby\", \"computer games\" ]" +
"}";
try
{
JsonObj
jo = new JsonObj(s);
System.out.println(jo.getAsString());
}
catch (ParseErrorEx ex)
{
System.out.println(ex.getErrMsg());
}
JsonObj.getAsString()
retranslates the tree
recursively into a formatted string. If the original string could
not be parsed because of an error a ParseErrorEx
exception is thrown. getErrPos()
delivers
the index in the string where the error is detected.JsonObj
tree some knowledge of
the node types is necessary. Their names reflect the names given in
www.json.org. The abstract base
class is Node
, NodePair
represents a
pair, NodeNumber
a number etc. To get pairs in a
JSON object there are the methods JsonObj.getNext()
and JsonObj.get(int)
. The same methods are available in
the NodeArray
class. Example traversing through the
JSON object jo
created above: NodeString ns,
nsa;
NodeValue
nv;
NodePair np
= jo.getNext();
while (np
!= null)
{
ns = np.getString();
System.out.println("label: " +
ns.getAsString());
nv = np.getValue();
if (nv instanceof NodeArray)
{
nsa = (NodeString)nv.get(1);
System.out.println("Second
hobby of Mike: " + nsa.getAsString());
}
np = jo.getNext();
}
System.out.println("First pair in jo: " +
jo.get(0).getAsString());
label: "name"
label: "age"
label: "hobbies"
Second hobby of Mike: "rugby"
First pair in jo: "name" : "Mike"
instanceof
to detect the type of unknown values as shown above.NodeLabel
, its name is NodeString
instead, because of the wording in www.json.org.It is possible to build up a JSON object by adding single pairs
to it. The following code creates the same object as shown above:
// Create
an empty JSON object:
JsonObj jo =
new JsonObj();
// Create the
NodeArray:
NodeArray
na = new NodeArray();
na.add(new NodeString("fishing"));
na.add(new NodeString("rugby"));
na.add(new NodeString("computer games"));
// Add the
pairs:
jo.addPair("name", "Mike");
jo.addPair("age", 23);
jo.addPair("hobbies", na);
System.out.println(jo.getAsString());
When creating NodeString
s or adding pairs
containing strings it is not necessary to add the extra quotes
around the strings; this is done by the constructor NodeString()
automatically.
object = '{' , [ members ] , '}'
;
members = pair , { ',' , pair }
;
pair = string , ':' ,
value
;
string = '"' , { char } , '"' ;
char = ? any Unicode character ?
- ctrlChar - '\') | ctrlChar | hexNumber
;
ctrlChar = '\"' | '\\' | '\/' | '\b' | '\f' |
'\n' | '\r' | '\t'
;
hexNumber = '\u' , hexDigit , hexDigit , hexDigit ,
hexDigit
;
hexDigit = digit09 | hexChar
;
digit09 = digit0 | digit19
;
digit0 = '0'
;
digit19 = '1' | '2' | '3' | '4' | '5' | '6'
| '7' | '8' | '9'
;
hexChar = 'A' | 'B' | 'C' | 'D' | 'E' | 'F'
| 'a' | 'b' | 'c' | 'd' | 'e' | 'f'
;
value = string | number |
object | array | 'true' | 'false' | 'null'
;
number = int | int frac | int exp |
int , frac , exp
;
int = [ '-' ] ,
digit | digit19 , digits
;
frac = '.' , digits
;
exp = eE , digits
digits = digit09 , { digit09 }
;
eE = 'e' | 'E' [
'+' | '-' ]
;
array = '[' , [ elements ] ,
']'
;
elements = value , { ',' , value }
;
Symbol |
Meaning |
---|---|
= |
definition |
, |
concatenation |
; |
termination |
| |
alternation |
[ ... ] |
option |
{ ... } |
repetition |
' ... ' |
terminal string |
? ... ? |
special sequence |
- |
exception |
->
" instead of "->>>
"):