20ca104b9897669e127e4ec8675321b12f780cff
braney
  Tue Aug 18 11:19:44 2026 -0700
lib, hgTracks: encode JSON object keys and configure/search text, refs #38123

diff --git src/lib/jsonParse.c src/lib/jsonParse.c
index 1aca5bc9902..f1da344543d 100644
--- src/lib/jsonParse.c
+++ src/lib/jsonParse.c
@@ -540,31 +540,35 @@
         errAbort("jsonElementRecurse; invalid type: %d", ele->type);
         break;
         }
     }
 if (endCallback != NULL)
     endCallback(ele, name, isLast, context);
 }
 
 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. */
 {
 spaceOut(f, indent);
 if (name != NULL)
     {
-    fprintf(f, "\"%s\": ", name);
+    // names are not always literals: an assembly hub's genome name ends up here, so a name
+    // is encoded the same way a string value is.
+    char *escaped = jsonStringEscapeLm(name, NULL);
+    fprintf(f, "\"%s\": ", escaped);
+    freez(&escaped);
     }
 switch (ele->type)
     {
     case jsonObject:
         {
 	fprintf(f, "{\n");
         break;
         }
     case jsonList:
         {
 	fprintf(f, "[\n");
         break;
         }
     case jsonString:
         {