52d8fc54704ce92936c8ef26d4d78499f63cfcde
kent
  Fri Aug 8 15:31:56 2014 -0700
Making 'var' parameter, which describes tag, optional so can be used for unnamed fields, such as in an array.
diff --git src/lib/jsonWrite.c src/lib/jsonWrite.c
index 7f551ad..cef09dc 100644
--- src/lib/jsonWrite.c
+++ src/lib/jsonWrite.c
@@ -38,99 +38,89 @@
     errAbort("Stack overflow in jsonWritePush");
 jw->objStack[stackIx] = val;
 jw->stackIx = stackIx;
 }
 
 static void jsonWritePopObjStack(struct jsonWrite *jw)
 /* pop object stack and just discard val. */
 {
 int stackIx = jw->stackIx - 1;
 if (stackIx < 0)
     errAbort("Stack underflow in jsonWritePopObjStack");
 jw->stackIx = stackIx;
 }
 
 void jsonWriteTag(struct jsonWrite *jw, char *var)
-/* Print out quoted tag followed by colon */
+/* Print out quoted tag followed by colon. Print out preceding comma if need be.  */
 {
 struct dyString *dy = jw->dy;
 if (jw->objStack[jw->stackIx] != 0)
     dyStringAppend(dy, ",\n");
 else
     jw->objStack[jw->stackIx] = 1;
+if (var != NULL)
     dyStringPrintf(jw->dy, "\"%s\": ", var);
 }
 
-#ifdef OLD
-void jsonWriteEndLine(struct jsonWrite *jw)
-/* Write comma if in middle, and then newline regardless. */
-{
-struct dyString *dy = jw->dy;
-if (isMiddle)
-   dyStringAppendC(dy, ',');
-dyStringAppendC(dy, '\n');
-}
-#endif /* OLD */
-
 void jsonWriteString(struct jsonWrite *jw, char *var, char *string)
-/* Print out "var": "val" */
+/* Print out "var": "val".  If var is NULL then just print out "val" */
 {
 struct dyString *dy = jw->dy;
 jsonWriteTag(jw, var);
 dyStringPrintf(dy, "\"%s\"", string);
 }
 
 void jsonWriteDateFromUnix(struct jsonWrite *jw, char *var, long long unixTimeVal)
-/* Add "var": YYYY-MM-DDT-HH:MM:SSZ given a Unix time stamp */
+/* Add "var": YYYY-MM-DDT-HH:MM:SSZ given a Unix time stamp. Var may be NULL. */
 {
 struct dyString *dy = jw->dy;
 time_t timeStamp = unixTimeVal;
 struct tm tm;
 gmtime_r(&timeStamp, &tm);
 jsonWriteTag(jw, var);
 dyStringPrintf(dy, "\"%d:%02d:%02dT%02d:%02d:%02dZ\"",
     1900+tm.tm_year, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
 }
 
 void jsonWriteNumber(struct jsonWrite *jw, char *var, long long val)
-/* print out "var": val as number */
+/* print out "var": val as number. Var may be NULL. */
 {
 struct dyString *dy = jw->dy;
 jsonWriteTag(jw, var);
 dyStringPrintf(dy, "%lld", val);
 }
 
 void jsonWriteLink(struct jsonWrite *jw, char *var, char *objRoot, char *name)
 /* Print out the jsony type link to another object.  objRoot will start and end with a '/'
- * and may have additional slashes in this usage. */
+ * and may have additional slashes in this usage. Var may be NULL. */
 {
 struct dyString *dy = jw->dy;
 jsonWriteTag(jw, var);
 dyStringPrintf(dy, "\"%s%s\"", objRoot, name);
 }
 
 void jsonWriteLinkNum(struct jsonWrite *jw, char *var, char *objRoot, long long id)
 /* Print out the jsony type link to another object with a numerical id.  objRoot will start 
- * and end with a '/' and may have additional slashes in this usage. */
+ * and end with a '/' and may have additional slashes in this usage. Var may be NULL */
 {
 struct dyString *dy = jw->dy;
 jsonWriteTag(jw, var);
 dyStringPrintf(dy, "\"%s%lld\"", objRoot, id);
 }
 
 void jsonWriteListStart(struct jsonWrite *jw, char *var)
-/* Start an array in JSON */
+/* Start an array in JSON. Var may be NULL */
 {
 struct dyString *dy = jw->dy;
 jsonWriteTag(jw, var);
 dyStringAppend(dy, "[\n");
 jsonWritePushObjStack(jw, FALSE);
 }
 
 void jsonWriteListEnd(struct jsonWrite *jw)
 /* End an array in JSON */
 {
 struct dyString *dy = jw->dy;
 dyStringAppend(dy, "]\n");
 jsonWritePopObjStack(jw);
 }