static void write_json_object(FILE *file, ParsingObject *pego, char *source, int level) { if (pego[0]) { if (pego[0]->child_size > 0) { fprintf(file, "{"); for (int i = 0; i < pego[0]->child_size; i++) { fprintf(file, "\n"); write_json_indent(file, level + 1); fprintf(file, "\"%s\": ", pego[0]->child[i]->tag); write_json(file, &pego[0]->child[i], source, level + 2); if (i + 1 < pego[0]->child_size) { fprintf(file, ","); } } fprintf(file, "\n"); write_json_indent(file, level + 1); fprintf(file, "}"); } else { if (pego[0]->value == NULL) { for (long j = pego[0]->start_pos; j < pego[0]->end_pos; j++) { fprintf(file, "%c", source[j]); } } else { fprintf(file, "%s", pego[0]->value); } } } }
static void write_json_array(FILE *file, ParsingObject *pego, char *source, int level) { fprintf(file, "["); for (int i = 0; i < pego[0]->child_size; i++) { fprintf(file, "\n"); write_json_indent(file, level + 1); fprintf(file, "{"); fprintf(file, "\n"); write_json_indent(file, level + 2); fprintf(file, "\"tag\": \"%s\", \"value\": ", pego[0]->child[i]->tag); write_json(file, &pego[0]->child[i], source, level + 3); fprintf(file, "\n"); write_json_indent(file, level + 1); fprintf(file, "}"); if (i + 1 < pego[0]->child_size) { fprintf(file, ","); } } fprintf(file, "\n"); write_json_indent(file, level); fprintf(file, "]"); }