Author:
Andrew Lord
This parses mql4 strings that contain JSON code. It creates a JSONValue that can be used to retrieve the fields within the JSON structure. It also provides a JSONIterator class to loop over object keys.
It parses the JSON using a simple a recursive descent parser. It requires the Hash class.
I still have to implement the parsing of unicode escaped characters.
The Codebase version might not be the most recent. The latest version can be found here.
Documentation:
JSONParser class
JSONValue class
Example:
#include "hash.mqh" #include "json.mqh"    string s = "{ \"firstName\": \"John\", \"lastName\": \"Smith\", \"age\": 25, "+ "\"address\": { \"streetAddress\": \"21 2nd Street\", \"city\": \"New York\", \"state\": \"NY\", \"postalCode\": \"10021\" },"+ " \"phoneNumber\": [ { \"type\": \"home\", \"number\": \"212 555-1234\" }, { \"type\": \"fax\", \"number\": \"646 555-4567\" } ],"+ " \"gender\":{ \"type\":\"male\" }  }";     JSONParser *parser = new JSONParser();    JSONValue *jv = parser.parse(s);    if (jv == NULL) {         Print("error:"+(string)parser.getErrorCode()+parser.getErrorMessage());     } else {         Print("PARSED:"+jv.toString());        if (jv.isObject()) { // check root value is an object. (it can be an array)             JSONObject *jo = jv;             // Direct access - will throw null pointer if wrong getter used.             Print("firstName:" + jo.getString("firstName"));             Print("city:" + jo.getObject("address").getString("city"));             Print("phone:" + jo.getArray("phoneNumber").getObject(0).getString("number"));             // Safe access in case JSON data is missing or different.             if (jo.getString("firstName",s) ) Print("firstName = "+s);             // Loop over object keys             JSONIterator *it = new JSONIterator(jo);             for( ; it.hasNext() ; it.next()) {                 Print("loop:"+it.key()+" = "+it.val().toString());             }             delete it;         }         delete jv;     }     delete parser;The latest version can also be found here.