String
to the constructor of the {@link
JsonFse.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
tree some knowledge of
the node types is necessary. Their names reflect the names given in
www.json.org. The abstract base
class is {@link JsonFse.Node}, {@link JsonFse.NodePair} represents a
pair, {@link JsonFse.NodeNumber} a number etc. To get pairs in a
JSON object there are the methods {@link JsonFse.JsonObj#getNext}
and {@link JsonFse.JsonObj#get}. The same methods are available in
the {@link JsonFse.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 {@link
JsonFse.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 "->>>
"):