{"record":{"id":"784c681285ca6323","repo":"karatelabs/karate","slug":"set-with-a-single-argument-expects-a-map-json-object","errorCode":null,"errorMessage":"set() with a single argument expects a Map / JSON object","messagePattern":"set\\(\\) with a single argument expects a Map / JSON object","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"karate-core/src/main/java/io/karatelabs/core/KarateJs.java","lineNumber":584,"sourceCode":"            }\n        }\n        return true;\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private JavaInvokable set() {\n        return args -> {\n            // v1 bulk form: karate.set(map) sets each top-level key as a variable.\n            // Common pattern is `karate.set(read('classpath:settings.json'))`\n            // to load a settings file into scope.\n            if (args.length == 1) {\n                if (args[0] instanceof Map<?, ?> bulk) {\n                    for (Map.Entry<?, ?> e : bulk.entrySet()) {\n                        engine.put(e.getKey() + \"\", e.getValue());\n                    }\n                    return null;\n                }\n                throw new RuntimeException(\"set() with a single argument expects a Map / JSON object\");\n            }\n            if (args.length < 2) {\n                throw new RuntimeException(\"set() needs at least two arguments: name and value\");\n            }\n            String name = args[0] + \"\";\n            if (args.length == 2) {\n                // Simple set: karate.set('name', value)\n                engine.put(name, args[1]);\n            } else {\n                // Path set: karate.set('name', 'path', value)\n                String path = args[1] + \"\";\n                Object value = args[2];\n                Object target = engine.get(name);\n\n                // Check if this is XPath (path starts with /) or target is XML\n                if (path.startsWith(\"/\") || target instanceof Node) {\n                    // XPath set on XML\n                    Document doc;","sourceCodeStart":566,"sourceCodeEnd":602,"githubUrl":"https://github.com/karatelabs/karate/blob/a22eb90246d958d15a47bf436693d0121ad2812d/karate-core/src/main/java/io/karatelabs/core/KarateJs.java#L566-L602","documentation":"When karate.set() is called with exactly one argument, Karate interprets it as a bulk set: the argument must be a Map / JSON object whose entries are variable name/value pairs. If the single argument is not a Map, this error is thrown because there is no other valid single-argument form.","triggerScenarios":"karate.set(x) where x is a string, number, array, or null instead of a JSON object; passing a JSON string rather than a parsed object.","commonSituations":"Migrating from two-argument set() and leaving a stray value; intending bulk assignment but passing JSON text instead of a JS object.","solutions":["Pass a JSON object for bulk set: karate.set({ a: 1, b: 2 }).","For a single value use two arguments: karate.set('name', value).","Parse JSON strings first if you have text, e.g. karate.set(JSON.parse(jsonText))."],"exampleFix":"// before\nkarate.set('{\"a\":1}');\n// after\nkarate.set({ a: 1 }); // or karate.set('a', 1)","handlingStrategy":"type-guard","validationCode":"if (bulk && (typeof bulk !== 'object' || Array.isArray(bulk))) throw new Error('single-arg set() needs a JSON object');\nkarate.set(bulk);","typeGuard":"function isBulkMap(v) { return v != null && typeof v === 'object' && !Array.isArray(v); }\n// use: if (isBulkMap(data)) karate.set(data); else karate.set('name', data);","tryCatchPattern":"try { karate.set(arg); }\ncatch (e) { if ((e.message || '').indexOf('expects a Map / JSON object') >= 0) karate.set('value', arg); else throw e; }","preventionTips":["Use the two-argument form for single values.","Parse JSON strings with JSON.parse before bulk set.","Check that the single-arg value is a plain object, not an array or string."],"tags":["javascript","type-mismatch","argument-validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"a22eb90246d958d15a47bf436693d0121ad2812d","analyzedAt":"2026-09-12T09:01:00.220Z","contentChangedAt":"2026-09-12T09:01:00.220Z","schemaVersion":2},"datasetVersion":"2026-09-16T19:17:19.609Z"}