hghfg

Dependencies:   jsmn mbed

Fork of _library_jsmn by ajeet prajapati

Committer:
yoonghm
Date:
Wed Jun 11 03:24:52 2014 +0000
Revision:
0:28f07b17e084
Example to use jsmn (Jasmine JSON Library)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yoonghm 0:28f07b17e084 1 #include <ctype.h>
yoonghm 0:28f07b17e084 2
yoonghm 0:28f07b17e084 3 #include "mbed.h"
yoonghm 0:28f07b17e084 4
yoonghm 0:28f07b17e084 5 #include "jsmn.h"
yoonghm 0:28f07b17e084 6
yoonghm 0:28f07b17e084 7 #define MAXTOKEN 64
yoonghm 0:28f07b17e084 8
yoonghm 0:28f07b17e084 9 const char *jsmn_type_str[] = {
yoonghm 0:28f07b17e084 10 "PRIMITIVE",
yoonghm 0:28f07b17e084 11 "OBJECT",
yoonghm 0:28f07b17e084 12 "ARRAY",
yoonghm 0:28f07b17e084 13 "STRING"
yoonghm 0:28f07b17e084 14 };
yoonghm 0:28f07b17e084 15
yoonghm 0:28f07b17e084 16
yoonghm 0:28f07b17e084 17 int main()
yoonghm 0:28f07b17e084 18 {
yoonghm 0:28f07b17e084 19 const char *js; // Pointer to json string
yoonghm 0:28f07b17e084 20 int r; // Number of token parsed
yoonghm 0:28f07b17e084 21 jsmn_parser p; // jsmn parser
yoonghm 0:28f07b17e084 22 jsmntok_t t[MAXTOKEN]; // Parsed token
yoonghm 0:28f07b17e084 23
yoonghm 0:28f07b17e084 24 // JSON may contain multibyte characters or encoded unicode in
yoonghm 0:28f07b17e084 25 // \uXXXX format.
yoonghm 0:28f07b17e084 26 // mbed compiler may complain "invalid multibyte character sequence".
yoonghm 0:28f07b17e084 27 js =
yoonghm 0:28f07b17e084 28 "{"
yoonghm 0:28f07b17e084 29 " \"menu\":"
yoonghm 0:28f07b17e084 30 " {"
yoonghm 0:28f07b17e084 31 " \"id\": 1234,"
yoonghm 0:28f07b17e084 32 " \"group\": \"File\","
yoonghm 0:28f07b17e084 33 " \"popup\":"
yoonghm 0:28f07b17e084 34 " {"
yoonghm 0:28f07b17e084 35 " \"menuitem\":"
yoonghm 0:28f07b17e084 36 " ["
yoonghm 0:28f07b17e084 37 " {\"value\": true, \"onclick\" : \"বিশাল\"},"
yoonghm 0:28f07b17e084 38 " {\"value\": false, 0x1328 : \"groß\"},"
yoonghm 0:28f07b17e084 39 " {\"value\": null, \"15\u00f8C\": \"3\u0111\"},"
yoonghm 0:28f07b17e084 40 " {\"value\": \"測試\", -12.34 : 99}"
yoonghm 0:28f07b17e084 41 " ]"
yoonghm 0:28f07b17e084 42 " }"
yoonghm 0:28f07b17e084 43 " }"
yoonghm 0:28f07b17e084 44 "}";
yoonghm 0:28f07b17e084 45
yoonghm 0:28f07b17e084 46 jsmn_init(&p);
yoonghm 0:28f07b17e084 47 r = jsmn_parse(&p, js, strlen(js), t, MAXTOKEN);
yoonghm 0:28f07b17e084 48
yoonghm 0:28f07b17e084 49 printf("Parsed %d tokens\n", r);
yoonghm 0:28f07b17e084 50
yoonghm 0:28f07b17e084 51 printf(" TYPE START END SIZE PAR\n");
yoonghm 0:28f07b17e084 52 printf(" ---------- ----- ---- ---- ---\n");
yoonghm 0:28f07b17e084 53
yoonghm 0:28f07b17e084 54 char ch;
yoonghm 0:28f07b17e084 55 jsmntok_t at; // A token for general use
yoonghm 0:28f07b17e084 56 for (int i = 0; i < r; i++)
yoonghm 0:28f07b17e084 57 {
yoonghm 0:28f07b17e084 58 at = t[i];
yoonghm 0:28f07b17e084 59 printf("Token %2d = %-10.10s (%4d - %4d, %3d, %2d) --> ",
yoonghm 0:28f07b17e084 60 i, jsmn_type_str[at.type],
yoonghm 0:28f07b17e084 61 at.start, at.end,
yoonghm 0:28f07b17e084 62 at.size, at.parent);
yoonghm 0:28f07b17e084 63
yoonghm 0:28f07b17e084 64 switch (at.type)
yoonghm 0:28f07b17e084 65 {
yoonghm 0:28f07b17e084 66 case JSMN_STRING:
yoonghm 0:28f07b17e084 67 printf("%-10.*s\n", at.end - at.start + 2, js + at.start - 1);
yoonghm 0:28f07b17e084 68 break;
yoonghm 0:28f07b17e084 69
yoonghm 0:28f07b17e084 70 case JSMN_PRIMITIVE:
yoonghm 0:28f07b17e084 71 ch = *(js + at.start);
yoonghm 0:28f07b17e084 72
yoonghm 0:28f07b17e084 73 if (isdigit(ch) || ch == '-')
yoonghm 0:28f07b17e084 74 printf("%-10.*s\n", at.end - at.start, js + at.start);
yoonghm 0:28f07b17e084 75 else if (tolower(ch) == 'n')
yoonghm 0:28f07b17e084 76 printf("null\n");
yoonghm 0:28f07b17e084 77 else if (tolower(ch) == 't')
yoonghm 0:28f07b17e084 78 printf("true\n");
yoonghm 0:28f07b17e084 79 else if (tolower(ch) == 'f')
yoonghm 0:28f07b17e084 80 printf("false\n");
yoonghm 0:28f07b17e084 81 break;
yoonghm 0:28f07b17e084 82
yoonghm 0:28f07b17e084 83 default:
yoonghm 0:28f07b17e084 84 printf("\n");
yoonghm 0:28f07b17e084 85 break;
yoonghm 0:28f07b17e084 86 }
yoonghm 0:28f07b17e084 87 }
yoonghm 0:28f07b17e084 88
yoonghm 0:28f07b17e084 89 while (1)
yoonghm 0:28f07b17e084 90 ;
yoonghm 0:28f07b17e084 91 }