Parse Query String (Typed)
JavaScript
Hard
3 views
Problem Description
You get a query string like key=value&key=value. Decode %xx and + as space. Convert values: 'true'/'false' -> boolean, numbers -> number, else string. Repeated keys become arrays. Print JSON object.
Input Format
One line query string.
Output Format
One line JSON object.
Sample Test Case
Input:
a=1&b=true&c=hi+bro&b=2
Output:
{"a":1,"b":[true,2],"c":"hi bro"}
Constraints
Length up to 2e5.
Official Solution
const fs=require('fs');const q=fs.readFileSync(0,'utf8').trim();const decode=s=>decodeURIComponent(s.replace(/\\+/g,' '));const toVal=s=>{if(s==='true')return true;if(s==='false')return false;const n=Number(s);if(!Number.isNaN(n)&&Number.isFinite(n)&&s!==''&&/^[+-]?(?:\\d+\\.?\\d*|\\.\\d+)$/.test(s))return n;return s;};let obj={};if(q){for(const part of q.split('&')){if(part==='')continue;const eq=part.indexOf('=');const k=decode(eq===-1?part:part.slice(0,eq));const v=decode(eq===-1?'':part.slice(eq+1));const val=toVal(v);if(Object.prototype.hasOwnProperty.call(obj,k)){if(Array.isArray(obj[k]))obj[k].push(val);else obj[k]=[obj[k],val];}else obj[k]=val;}}process.stdout.write(JSON.stringify(obj));
Solutions (0)
No solutions submitted yet. Be the first!
No comments yet. Start the discussion!