Sample program using picojson library. Note: it seems that there are some memory? issues with \"complex\" structures. So always test your json with the lib before using it within your application.

Dependencies:   mbed picojson

Committer:
mimil
Date:
Fri Sep 09 13:13:17 2011 +0000
Revision:
0:81c978de0e2b
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mimil 0:81c978de0e2b 1 #include "mbed.h"
mimil 0:81c978de0e2b 2 #include "picojson.h"
mimil 0:81c978de0e2b 3
mimil 0:81c978de0e2b 4
mimil 0:81c978de0e2b 5 void parse() {
mimil 0:81c978de0e2b 6 picojson::value v;
mimil 0:81c978de0e2b 7 const char *json = "{\"string\": \"it works\", \"number\": 3.14, \"integer\":5}";
mimil 0:81c978de0e2b 8
mimil 0:81c978de0e2b 9 string err = picojson::parse(v, json, json + strlen(json));
mimil 0:81c978de0e2b 10 printf("res error? %s\r\n", err.c_str());
mimil 0:81c978de0e2b 11 printf("string =%s\r\n" , v.get("string").get<string>().c_str());
mimil 0:81c978de0e2b 12 printf("number =%f\r\n" , v.get("number").get<double>());
mimil 0:81c978de0e2b 13 printf("integer =%d\r\n" , (int)v.get("integer").get<double>());
mimil 0:81c978de0e2b 14 }
mimil 0:81c978de0e2b 15
mimil 0:81c978de0e2b 16 void serialize() {
mimil 0:81c978de0e2b 17 picojson::object v;
mimil 0:81c978de0e2b 18 picojson::object inner;
mimil 0:81c978de0e2b 19 string val = "tt";
mimil 0:81c978de0e2b 20
mimil 0:81c978de0e2b 21 v["aa"] = picojson::value(val);
mimil 0:81c978de0e2b 22 v["bb"] = picojson::value(1.66);
mimil 0:81c978de0e2b 23 inner["test"] = picojson::value(true);
mimil 0:81c978de0e2b 24 inner["integer"] = picojson::value(1.0);
mimil 0:81c978de0e2b 25 v["inner"] = picojson::value(inner);
mimil 0:81c978de0e2b 26
mimil 0:81c978de0e2b 27 string str = picojson::value(v).serialize();
mimil 0:81c978de0e2b 28 printf("serialized content = %s\r\n" , str.c_str());
mimil 0:81c978de0e2b 29 }
mimil 0:81c978de0e2b 30
mimil 0:81c978de0e2b 31 void advanced() {
mimil 0:81c978de0e2b 32 picojson::value v;
mimil 0:81c978de0e2b 33 const char *jsonsoure =
mimil 0:81c978de0e2b 34 "{\"menu\": {"
mimil 0:81c978de0e2b 35 "\"id\": \"f\","
mimil 0:81c978de0e2b 36 "\"popup\": {"
mimil 0:81c978de0e2b 37 " \"menuitem\": ["
mimil 0:81c978de0e2b 38 " {\"v\": \"0\"},"
mimil 0:81c978de0e2b 39 " {\"v\": \"1\"},"
mimil 0:81c978de0e2b 40 " {\"v\": \"2\"}"
mimil 0:81c978de0e2b 41 " ]"
mimil 0:81c978de0e2b 42 " }"
mimil 0:81c978de0e2b 43 "}"
mimil 0:81c978de0e2b 44 "}";
mimil 0:81c978de0e2b 45 char * json = (char*) malloc(strlen(jsonsoure)+1);
mimil 0:81c978de0e2b 46 strcpy(json, jsonsoure);
mimil 0:81c978de0e2b 47 string err = picojson::parse(v, json, json + strlen(json));
mimil 0:81c978de0e2b 48 printf("res error? %s\r\n", err.c_str());
mimil 0:81c978de0e2b 49
mimil 0:81c978de0e2b 50 printf("id =%s\r\n", v.get("menu").get("id").get<string>().c_str());
mimil 0:81c978de0e2b 51
mimil 0:81c978de0e2b 52 picojson::array list = v.get("menu").get("popup").get("menuitem").get<picojson::array>();
mimil 0:81c978de0e2b 53
mimil 0:81c978de0e2b 54 for (picojson::array::iterator iter = list.begin(); iter != list.end(); ++iter) {
mimil 0:81c978de0e2b 55 printf("menu item value =%s\r\n", (*iter).get("v").get<string>().c_str());
mimil 0:81c978de0e2b 56 }
mimil 0:81c978de0e2b 57 }
mimil 0:81c978de0e2b 58
mimil 0:81c978de0e2b 59 int main() {
mimil 0:81c978de0e2b 60 printf("Starting PicoJSONSample "__TIME__"\r\n");
mimil 0:81c978de0e2b 61 printf(">>> parsing \r\n");
mimil 0:81c978de0e2b 62 parse();
mimil 0:81c978de0e2b 63 printf(">>> serializing \r\n");
mimil 0:81c978de0e2b 64 serialize();
mimil 0:81c978de0e2b 65 printf(">>> advanced parsing \r\n");
mimil 0:81c978de0e2b 66 advanced();
mimil 0:81c978de0e2b 67 printf("Ending PicoJSONSample " __TIME__ "\r\n");
mimil 0:81c978de0e2b 68 }