38791fcc8e27d95bf1ecde01035aae26027f956b max Thu Feb 18 05:05:17 2021 -0800 making hgBlat json format look more like our API, refs #27010 diff --git src/lib/psl.c src/lib/psl.c index 3d4b4ae..fc445ce 100644 --- src/lib/psl.c +++ src/lib/psl.c @@ -183,58 +183,56 @@ fprintf(f, "%u,", el->qNumInsert); fprintf(f, "%d,", el->qBaseInsert); fprintf(f, "%u,", el->tNumInsert); fprintf(f, "%d,", el->tBaseInsert); fprintf(f, "\"%s\",", el->strand); fprintf(f, "\"%s\",", el->qName); fprintf(f, "%u,", el->qSize); fprintf(f, "%u,", el->qStart); fprintf(f, "%u,", el->qEnd); fprintf(f, "\"%s\",", el->tName); fprintf(f, "%u,", el->tSize); fprintf(f, "%u,", el->tStart); fprintf(f, "%u,", el->tEnd); fprintf(f, "%u,", el->blockCount); -fputs("[", f); +fputs("\"", f); for (int i=0; i<el->blockCount; ++i) { fprintf(f, "%u", el->blockSizes[i]); if (i < el->blockCount-1) fputc(',', f); } -fputs("]", f); -fputs(",", f); +fputs("\",", f); -fputs("[", f); +fputs("\"", f); for (int i=0; i<el->blockCount; ++i) { fprintf(f, "%u", el->qStarts[i]); if (i < el->blockCount-1) fputc(',', f); // json does not allow trailing commas } -fputs("]", f); -fputs(",", f); +fputs("\",", f); -fputs("[", f); +fputs("\"", f); for (int i=0; i<el->blockCount; ++i) { fprintf(f, "%u", el->tStarts[i]); if (i < el->blockCount-1) fputc(',', f); } -fputs("]", f); +fputs("\"", f); if (el->qSequence) { fputc(',',f); fputc('[',f); for (int i=0; i<el->blockCount; ++i) { fprintf(f, "'%s'", el->qSequence[i]); if (i < el->blockCount-1) fputc(',', f); } fputc(']',f); fputc(',',f); fputc('[',f); @@ -574,46 +572,52 @@ void pslWriteAll(struct psl *pslList, char *fileName, boolean writeHeader) /* Write a psl file from list. */ { FILE *f; struct psl *psl; f = mustOpen(fileName, "w"); if (writeHeader) pslWriteHead(f); for (psl = pslList; psl != NULL; psl = psl->next) pslTabOut(psl, f); fclose(f); } -void pslWriteAllJson(struct psl *pslList, FILE *f, boolean writeHeader) +void pslWriteAllJson(struct psl *pslList, FILE *f, char *db, boolean writeHeader) /* Write a psl file from list as a json array . */ { -fputs("[\n", f); +fputs("{\n", f); if (writeHeader) + { + fputs("\"track\": \"blat\",\n", f); + fprintf(f, "\"genome\": \"%s\",\n", db); + fputs("\"fields\": ", f); pslLabelColumnsJson(f); fputs(",\n", f); + } +fputs("\"blat\" : [\n", f); for (struct psl *psl = pslList; psl; psl = psl->next) { pslOutputJson(psl, f); if (psl->next) fputs(",\n", f); } -puts("\n]\n"); +puts("\n]\n}\n"); } void pslxFileOpen(char *fileName, enum gfType *retQueryType, enum gfType *retTargetType, struct lineFile **retLf) /* Read header part of psl and make sure it's right. Return * sequence types and file handle. */ { char *line; int lineSize; char *words[30]; char *version; int wordCount; int i; enum gfType qt = gftRna, tt = gftDna; struct lineFile *lf = lineFileOpen(fileName, TRUE);