/* grid = ediMakeGrid("[ \ { id: '1', country: 'Australia' }, \ { id: '2', country: 'China' }, \ ]"); */ EdiGrid *ediMakeGrid(cchar *json) { MprHash *obj, *row; MprKey *kp; EdiGrid *grid; EdiRec *rec; int r, nrows, nfields; if ((obj = mprDeserialize(json)) == 0) { return 0; } nrows = mprGetHashLength(obj); if ((grid = ediCreateBareGrid(NULL, "", nrows)) == 0) { return 0; } for (r = 0, ITERATE_KEYS(obj, kp)) { if (kp->type != MPR_JSON_OBJ) { continue; } row = (MprHash*) kp->data; nfields = mprGetHashLength(row); if ((rec = ediCreateBareRec(NULL, "", nfields)) == 0) { return 0; } if (ediSetFields(rec, row) == 0) { return 0; } grid->records[r++] = rec; } return 0; }
/* rec = ediMakeRec("{ id: 1, title: 'Message One', body: 'Line one' }"); */ EdiRec *ediMakeRec(cchar *json) { MprHash *obj; MprKey *kp; EdiRec *rec; EdiField *fp; int f, nfields; if ((obj = mprDeserialize(json)) == 0) { return 0; } nfields = mprGetHashLength(obj); if ((rec = ediCreateBareRec(NULL, "", nfields)) == 0) { return 0; } for (f = 0, ITERATE_KEYS(obj, kp)) { if (kp->type == MPR_JSON_ARRAY || kp->type == MPR_JSON_OBJ) { continue; } fp = &rec->fields[f++]; fp->valid = 1; fp->name = kp->key; fp->value = kp->data; fp->type = EDI_TYPE_STRING; fp->flags = 0; } return rec; }
static EdiGrid *hashToGrid(MprHash *hash) { EdiGrid *grid; EdiRec *rec; cchar *data; char key[8]; int i, len; len = mprGetHashLength(hash); grid = ediCreateBareGrid(NULL, "grid", len); for (i = 0; i < len; i++) { data = mprLookupKey(hash, itosbuf(key, sizeof(key), i, 10)); grid->records[i] = rec = ediCreateBareRec(NULL, "grid", 1); rec->fields[0].name = sclone("value"); rec->fields[0].type = EDI_TYPE_STRING; rec->fields[0].value = data; } return grid; }