Ejemplo n.º 1
0
void jsonDyStringPrint(struct dyString *dy, struct jsonElement *json, char *name, int indentLevel)
// dyStringPrint out a jsonElement, indentLevel -1 means no indenting
{

char *indentBuf = makeIndentBuf(indentLevel);
if(name != NULL)
    {
    if (indentLevel >= 0 )
        dyStringPrintf(dy, "// START %s\n%s", name, indentBuf);
    dyStringPrintf(dy, "var %s = ", name);
    }
jsonDyStringPrintRecurse(dy, json, (indentLevel - 1)); // will increment back to indentLevel
if(name != NULL)
    {
    dyStringPrintf(dy, "%s;\n", indentBuf);
    if (indentLevel >= 0 )
        dyStringPrintf(dy, "// END %s\n", name);
    }
if (indentLevel >= 0)
    freez(&indentBuf);
}
Ejemplo n.º 2
0
void jsonPrint(struct jsonElement *json, char *name, int indentLevel)
{
// print out a jsonElement, indentLevel -1 means no indenting

char *indentBuf = makeIndentBuf(indentLevel);
if(name != NULL)
    {
    if (indentLevel >= 0 )
        hPrintf("// START %s\n%s", name, indentBuf);
    hPrintf("var %s = ", name);
    }
jsonPrintRecurse(json, (indentLevel - 1)); // will increment back to indentLevel
if(name != NULL)
    {
    hPrintf("%s;\n", indentBuf);
    if (indentLevel >= 0 )
        hPrintf("// END %s\n", name);
    }
if (indentLevel >= 0)
    freez(&indentBuf);
}
Ejemplo n.º 3
0
static void jsonDyStringPrintRecurse(struct dyString *dy, struct jsonElement *ele, int indentLevel)
{
if (indentLevel >= -1) // Note that < -1 will result in no indenting
    indentLevel++;
char *tab = "\t";
char *nl = "\n";
if (indentLevel < 0)
    {
    tab = "";
    nl = "";
    }
char *indentBuf = makeIndentBuf(indentLevel);
switch (ele->type)
    {
    case jsonObject:
        {
        dyStringPrintf(dy,"{%s",nl);
        if(hashNumEntries(ele->val.jeHash))
            {
            struct hashEl *el, *list = hashElListHash(ele->val.jeHash);
            slSort(&list, hashElCmp);
            for (el = list; el != NULL; el = el->next)
                {
                struct jsonElement *val = el->val;
                dyStringPrintf(dy,"%s%s\"%s\": ", indentBuf, tab, el->name);
                jsonDyStringPrintRecurse(dy, val, indentLevel);
                dyStringPrintf(dy,"%s%s", el->next == NULL ? "" : ",",nl);
                }
            hashElFreeList(&list);
            }
        dyStringPrintf(dy,"%s}", indentBuf);
        break;
        }
    case jsonList:
        {
        struct slRef *el;
        dyStringPrintf(dy,"[%s",nl);
        if(ele->val.jeList)
            {
            for (el = ele->val.jeList; el != NULL; el = el->next)
                {
                struct jsonElement *val = el->val;
                dyStringPrintf(dy,"%s%s", indentBuf,tab);
                jsonDyStringPrintRecurse(dy, val, indentLevel);
                dyStringPrintf(dy,"%s%s", el->next == NULL ? "" : ",",nl);
                }
            }
        dyStringPrintf(dy,"%s]", indentBuf);
        break;
        }
    case jsonString:
        {
        dyStringPrintf(dy,"\"%s\"", jsonStringEscape(ele->val.jeString));
        break;
        }
    case jsonBoolean:
        {
        dyStringPrintf(dy,"%s", ele->val.jeBoolean ? "true" : "false");
        break;
        }
    case jsonNumber:
        {
        char buf[256];
        safef(buf, sizeof(buf), "%ld", ele->val.jeNumber);
        dyStringPrintf(dy,"%s", buf);
        break;
        }
    case jsonDouble:
        {
        char buf[256];
        safef(buf, sizeof(buf), "%g", ele->val.jeDouble);
        dyStringPrintf(dy,"%s", buf);
        break;
        }
    default:
        {
        errAbort("jsonPrintRecurse; invalid type: %d", ele->type);
        break;
        }
    }
if (indentLevel >= 0)
    freez(&indentBuf);
}