static bool asJson(yarp::os::ConstString &accum, yarp::os::Value &v) { if (v.isInt()||v.isDouble()) { accum += v.toString(); return true; } if (v.isString()||v.isVocab()) { yarp::os::ConstString x = v.toString(); accum += "\""; for (int j=0; j<(int)x.length(); j++) { char ch = x[j]; if (ch=='\n') { accum += '\\'; accum += 'n'; } else if (ch=='\r') { accum += '\\'; accum += 'r'; } else if (ch=='\0') { accum += '\\'; accum += '0'; } else { if (ch=='\\'||ch=='\"') { accum += '\\'; } accum += ch; } } accum += "\""; } if (v.isList()) { yarp::os::Bottle *bot = v.asList(); return asJson(accum,bot); } return false; }
static void convertValue(JSContext * jct, JS::MutableHandleValue theData, const yarp::os::Value & inputValue) { ODL_ENTER(); //#### ODL_P2("jct = ", jct, "inputValue = ", &inputValue); //#### if (inputValue.isBool()) { theData.setBoolean(inputValue.asBool()); } else if (inputValue.isInt()) { theData.setInt32(inputValue.asInt()); } else if (inputValue.isString()) { YarpString value = inputValue.asString(); JSString * aString = JS_NewStringCopyZ(jct, value.c_str()); if (aString) { theData.setString(aString); } } else if (inputValue.isDouble()) { theData.setDouble(inputValue.asDouble()); } else if (inputValue.isDict()) { yarp::os::Property * value = inputValue.asDict(); if (value) { yarp::os::Bottle asList(value->toString()); convertDictionary(jct, theData, asList); } } else if (inputValue.isList()) { yarp::os::Bottle * value = inputValue.asList(); if (value) { yarp::os::Property asDict; if (ListIsReallyDictionary(*value, asDict)) { convertDictionary(jct, theData, *value); } else { convertList(jct, theData, *value); } } } else { // We don't know what to do with this... theData.setNull(); } ODL_EXIT(); //#### } // convertValue