JSBool js_json_parse(JSContext *cx, uintN argc, jsval *vp) { JSString *s = NULL; jsval *argv = vp + 2; jsval reviver = JSVAL_NULL; JSAutoTempValueRooter tvr(cx, 1, &reviver); if (!JS_ConvertArguments(cx, argc, argv, "S / v", &s, &reviver)) return JS_FALSE; JSONParser *jp = js_BeginJSONParse(cx, vp); JSBool ok = jp != NULL; if (ok) { const jschar *chars; size_t length; s->getCharsAndLength(chars, length); ok = js_ConsumeJSONText(cx, jp, chars, length); ok &= js_FinishJSONParse(cx, jp, reviver); } return ok; }
JSBool js_json_parse(JSContext *cx, uintN argc, jsval *vp) { JSString *s = NULL; jsval *argv = vp + 2; // Must throw an Error if there isn't a first arg if (!JS_ConvertArguments(cx, argc, argv, "S", &s)) return JS_FALSE; JSONParser *jp = js_BeginJSONParse(cx, vp); JSBool ok = jp != NULL; if (ok) { ok = js_ConsumeJSONText(cx, jp, JS_GetStringChars(s), JS_GetStringLength(s)); ok &= js_FinishJSONParse(cx, jp); } if (!ok) JS_ReportError(cx, "Error parsing JSON"); return ok; }