8d925434338debb305027cfbac15e29ca0d9e3a6
angie
  Mon Jun 29 13:11:09 2015 -0700
Added support for null to jsonParse, except for when we expect to find
an int, float or boolean.

diff --git src/inc/jsonParse.h src/inc/jsonParse.h
index febba09..ae6acd9 100644
--- src/inc/jsonParse.h
+++ src/inc/jsonParse.h
@@ -5,57 +5,60 @@
 #define JSONPARSE_H
 
 /* JSON Element code let's you build up a DOM like data structure in memory and then serialize it into
    html for communication with client side code.
  */
 
 // supported types
 
 typedef enum _jsonElementType
 {
     jsonList     = 0,
     jsonObject   = 1,
     jsonNumber   = 2,
     jsonDouble   = 3,
     jsonBoolean  = 4,
-    jsonString   = 5
+    jsonString   = 5,
+    jsonNull     = 6
 } jsonElementType;
 
 union jsonElementVal
 {
     struct slRef *jeList;
     struct hash *jeHash;
     long jeNumber;
     double jeDouble;
     boolean jeBoolean;
     char *jeString;
+    void *jeNull;
 };
 
 struct jsonElement
 {
     jsonElementType type;
     union jsonElementVal val;
 };
 
 // constructors for each jsonElementType
 
 struct jsonElement *newJsonString(char *str);
 struct jsonElement *newJsonBoolean(boolean val);
 struct jsonElement *newJsonNumber(long val);
 struct jsonElement *newJsonDouble(double val);
 struct jsonElement *newJsonObject(struct hash *h);
 struct jsonElement *newJsonList(struct slRef *list);
+struct jsonElement *newJsonNull();
 
 void jsonObjectAdd(struct jsonElement *h, char *name, struct jsonElement *ele);
 // Add a new element to a jsonObject; existing values are replaced.
 
 void jsonListAdd(struct jsonElement *list, struct jsonElement *ele);
 // Add a new element to a jsonList
 
 struct jsonElement *jsonParse(char *str);
 // parse string into an in-memory json representation
 
 char *jsonStringEscape(char *inString);
 /* backslash escape a string for use in a double quoted json string.
  * More conservative than javaScriptLiteralEncode because
  * some json parsers complain if you escape & or ' */
 
@@ -82,46 +85,46 @@
 
 void jsonPrintOneStart(struct jsonElement *ele, char *name, boolean isLast, int indent, FILE *f);
 /* Print the start of one json element - just name and maybe an opening brace or bracket.
  * Recursion is handled elsewhere. */
 
 void jsonPrintOneEnd(struct jsonElement *ele, char *name, boolean isLast, boolean indent, FILE *f);
 /* Print object end */
 
 void jsonPrintToFile(struct jsonElement *root, char *name, FILE *f, int indentPer);
 /* Print out JSON object and all children nicely indented to f as JSON objects. 
  * Name may be NULL.  Implemented via jsonPrintOneStart/jsonPrintOneEnd. */
 
 /** Routines that check json type and return corresponding value. **/
 
 struct slRef *jsonListVal(struct jsonElement *ele, char *name);
-/* Enforce element is type jsonList.  Return list value */
+/* Enforce element is type jsonList or jsonNull.  Return list value, which may be NULL. */
 
 struct hash *jsonObjectVal(struct jsonElement *ele, char *name);
-/* Enforce object is type jsonObject.  Return object hash */
+/* Enforce object is type jsonObject or jsonNull.  Return object hash, which may be NULL. */
 
 long jsonNumberVal(struct jsonElement *ele, char *name);
 /* Enforce element is type jsonNumber and return value. */
 
 double jsonDoubleVal(struct jsonElement *ele, char *name);
 /* Enforce element is type jsonDouble and return value. */
 
 boolean jsonBooleanVal(struct jsonElement *ele, char *name);
 /* Enforce element is type jsonBoolean and return value. */
 
 char *jsonStringVal(struct jsonElement *ele, char *eleName);
-/* Enforce element is type jsonString and return value. */
+/* Enforce element is type jsonString or jsonNull.  Return value, which may be NULL. */
 
 /** Routines that help work with json objects (bracket enclosed key/val pairs **/
 
 struct jsonElement *jsonFindNamedField(struct jsonElement *object, 
     char *objectName, char *field);
 /* Find named field of object or return NULL if not found.  Abort if object
  * is not actually an object. */
 
 struct jsonElement *jsonMustFindNamedField(struct jsonElement *object, 
     char *objectName, char *field);
 /* Find named field of object or die trying. */
 
 char *jsonOptionalStringField(struct jsonElement *object, char *field, char *defaultVal);
 /* Return string valued field of object, or defaultVal if it doesn't exist. */