java.lang.String cannot be cast to org.json.simple.JSONObject - Json/String Conversion Error?

Pankhil
Tera Expert

 

I have a requirement to generate a RITM by copying Variables into new RITM. 

var gr = new GlideRecord("sc_req_item");
    if (gr.get('da80597b87afc91096ba62c83cbb3580')) {
        var obj = {};
    var variables = gr.variables.getElements();
    for (var i=0;i<variables.length;i++) {
	obj[variables[i].getName().toString()] = variables[i].getValue().toString();
    } 
}

gs.info(JSON.stringify(obj));

This code generates output of the variables that i need. 

{"requested_for":"4115490087604110fcc1840e0ebb359e","u_call_back_number":"706-721-4000","recurring_req":"Yes","frequency":"30"}


var cart = new sn_sc.CartJS();
var item =
{
'sysparm_id': '6971c09287ba415096ba62c83cbb35b0',
'sysparm_quantity': '1',
'variables': {"requested_for":"4115490087604110fcc1840e0ebb359e","u_call_back_number":"706-721-4000","recurring_req":"Yes","frequency":"30"}};
var cartDetails = cart.addToCart(item);
gs.info(cartDetails);
var checkoutInfo = cart.checkoutCart();
gs.info(checkoutInfo);

This code generates the RITM of the catalog item. 

But when i combine both 

var gr = new GlideRecord("sc_req_item");
    if (gr.get('da80597b87afc91096ba62c83cbb3580')) {
        var obj = {};
    var variables = gr.variables.getElements();
    for (var i=0;i<variables.length;i++) {
	obj[variables[i].getName().toString()] = variables[i].getValue().toString();
    } 
}

gs.info(JSON.stringify(obj));
var varStr = JSON.stringify(obj);
var cart = new sn_sc.CartJS();
var item =
{
'sysparm_id': '6971c09287ba415096ba62c83cbb35b0',
'sysparm_quantity': '1',
'variables': varStr};
var cartDetails = cart.addToCart(item);
gs.info(cartDetails);
var checkoutInfo = cart.checkoutCart();
gs.info(checkoutInfo);

I get an error: 

Couldn't decipher the stack trace resulting from the following JavaScriptException:
java.lang.ClassCastException: java.lang.String cannot be cast to org.json.simple.JSONObject: org.mozilla.javascript.JavaScriptException: java.lang.ClassCastException: java.lang.String cannot be cast to org.json.simple.JSONObject: org.mozilla.javascript.Context.makeJavaScriptException(Context.java:1952) org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1938) org.mozilla.javascript.MemberBox.invoke(MemberBox.java:143) org.mozilla.javascript.FunctionObject.doInvoke(FunctionObject.java:670) org.mozilla.javascript.FunctionObject.call(FunctionObject.java:614) org.mozilla.javascript.ScriptRuntime.doCall(ScriptRuntime.java:2609) org.mozilla.javascript.Interpreter.interpretLoop(Interpreter.java:1518) org.mozilla.javascript.Interpreter.interpret(Interpreter.java:830) org.mozilla.javascript.InterpretedFunction.lambda$call$0(InterpretedFunction.java:152) com.glide.caller.gen.null_null_script.call(Unknown Source) com.glide.script.ScriptCaller.call(ScriptCaller.java:18) org.mozilla.javascript.InterpretedFunction.call(InterpretedFunction.java:151) org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:563) org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3459) org.mozilla.javascript.InterpretedFunction.exec(InterpretedFunction.java:164) com.glide.script.ScriptEvaluator.execute(ScriptEvaluator.java:354) com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:177) com.glide.script.ScriptEvaluator.evaluateString(ScriptEvaluator.java:111) com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:322) com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:226) com.glide.script.fencing.GlideScopedEvaluator.evaluateScript(GlideScopedEvaluator.java:213) com.glide.processors.ScriptProcessor.evaluateScript0(ScriptProcessor.java:390) com.glide.processors.ScriptProcessor.lambda$evaluateScriptWithRecordingOption$0(ScriptProcessor.java:379) com.glide.rollback.recording.RollbackRecorder.execute(RollbackRecorder.java:67) com.glide.processors.ScriptProcessor.evaluateScriptWithRecordingOption(ScriptProcessor.java:379) com.glide.processors.ScriptProcessor.evaluateScript(ScriptProcessor.java:359) com.glide.processors.ScriptProcessor.runScript(ScriptProcessor.java:258) com.glide.processors.ScriptProcessor.process(ScriptProcessor.java:216) com.glide.processors.AProcessor.runProcessor(AProcessor.java:612) com.glide.processors.AProcessor.processTransaction(AProcessor.java:274) com.glide.processors.ProcessorRegistry.process0(ProcessorRegistry.java:184) com.glide.processors.ProcessorRegistry.process(ProcessorRegistry.java:172) com.glide.ui.GlideServletTransaction.process(GlideServletTransaction.java:46) com.glide.sys.Transaction.run(Transaction.java:2468) com.glide.ui.HTTPTransaction.run(HTTPTransaction.java:27) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
1 ACCEPTED SOLUTION

Pankhil
Tera Expert

I was able to solve this. 

'variables' -> is an array data type. so, there was no additional conversion required.

var gr = new GlideRecord("sc_req_item");
    if (gr.get('da80597b87afc91096ba62c83cbb3580')) {
        var obj = {};
    var variables = gr.variables.getElements();
    for (var i=0;i<variables.length;i++) {
	obj[variables[i].getName().toString()] = variables[i].getValue().toString();
    } 
}

var cart = new sn_sc.CartJS();
var item =
{'sysparm_id': '6971c09287ba415096ba62c83cbb35b0',
'sysparm_quantity': '1',
'variables': obj};
var cartDetails = cart.addToCart(item);
gs.info(cartDetails);
var checkoutInfo = cart.checkoutCart();
gs.info(checkoutInfo);

View solution in original post

3 REPLIES 3

Chetan Mahajan
Kilo Sage
Kilo Sage

Hi Pankhil,

                   try below code 

gs.info(JSON.stringify(obj));

var json = new JSON();
var varStr = json.encode(obj);
var cart = new sn_sc.CartJS();
var item =
{
'sysparm_id': '6971c09287ba415096ba62c83cbb35b0',
'sysparm_quantity': '1',
'variables': varStr};

*** Script: {"requested_for":"4115490087604110fcc1840e0ebb359e","u_call_back_number":"706-721-4000","recurring_req":"Yes","frequency":"30"}
Couldn't decipher the stack trace resulting from the following JavaScriptException:
java.lang.ClassCastException: java.lang.String cannot be cast to org.json.simple.JSONObject:


still getting the same error!

Pankhil
Tera Expert

I was able to solve this. 

'variables' -> is an array data type. so, there was no additional conversion required.

var gr = new GlideRecord("sc_req_item");
    if (gr.get('da80597b87afc91096ba62c83cbb3580')) {
        var obj = {};
    var variables = gr.variables.getElements();
    for (var i=0;i<variables.length;i++) {
	obj[variables[i].getName().toString()] = variables[i].getValue().toString();
    } 
}

var cart = new sn_sc.CartJS();
var item =
{'sysparm_id': '6971c09287ba415096ba62c83cbb35b0',
'sysparm_quantity': '1',
'variables': obj};
var cartDetails = cart.addToCart(item);
gs.info(cartDetails);
var checkoutInfo = cart.checkoutCart();
gs.info(checkoutInfo);