2011-01-12 8 views

उत्तर

1

इस->

// convert string to object 
str = 'a=6&id=99'; 
var arr = str.split('&'); 
var obj = {}; 
for(var i = 0; i < arr.length; i++) { 
    var bits = arr[i].split('='); 
    obj[bits[0]] = bits[1]; 
} 
//alert(obj.a); 
//alert(obj.id); 

// convert object back to string 
str = ''; 
for(key in obj) { 
    str += key + '=' + obj[key] + '&'; 
} 
str = str.slice(0, str.length - 1); 
alert(str); 

प्रयास करें या इस (JQuery) का उपयोग http://api.jquery.com/jQuery.param/

+1

jQuery.param क्रमबद्धता करता है - और सवाल उलटा के बारे में था ऑपरेशन। –

4

निम्नलिखित कोड को चाल करना चाहिए:

var str = 'CorrelationId=1&PickedNumbers%5B%5D=1&PickedNumbers%5B%5D=2&PickedNumbers%5B%5D=3&PickedNumbers%5B%5D=4'; 
var keyValuePairs = str.split('&'); 
var json = {}; 
for(var i=0,len = keyValuePairs.length,tmp,key,value;i <len;i++) { 
    tmp = keyValuePairs[i].split('='); 
    key = decodeURIComponent(tmp[0]); 
    value = decodeURIComponent(tmp[1]); 
    if(key.search(/\[\]$/) != -1) { 
     tmp = key.replace(/\[\]$/,''); 
     json[tmp] = json[tmp] || []; 
     json[tmp].push(value); 
    } 
    else { 
     json[key] = value; 
    } 
} 
1

यह करने के लिए यहां एक शुद्ध-जावास्क्रिप्ट तरीका है। जावास्क्रिप्ट ढांचे से आप इससे भी मदद कर सकते हैं। संपादित करें: बस किक्स के लिए, मैंने शब्दकोश पार्सिंग में भी फेंक दिया। दूसरा उदाहरण देखें।

function decodeFormParams(params) { 
    var pairs = params.split('&'), 
     result = {}; 

    for (var i = 0; i < pairs.length; i++) { 
    var pair = pairs[i].split('='), 
     key = decodeURIComponent(pair[0]), 
     value = decodeURIComponent(pair[1]), 
     isArray = /\[\]$/.test(key), 
     dictMatch = key.match(/^(.+)\[([^\]]+)\]$/); 

    if (dictMatch) { 
     key = dictMatch[1]; 
     var subkey = dictMatch[2]; 

     result[key] = result[key] || {}; 
     result[key][subkey] = value; 
    } else if (isArray) { 
     key = key.substring(0, key.length-2); 
     result[key] = result[key] || []; 
     result[key].push(value); 
    } else { 
     result[key] = value; 
    } 
    } 

    return result; 
} 

decodeFormParams("CorrelationId=1&PickedNumbers%5B%5D=1&PickedNumbers%5B%5D=2&PickedNumbers%5B%5D=3&PickedNumbers%5B%5D=4"); 
// => {"CorrelationId":"1","PickedNumbers":["1","2","3","4"]} 

decodeFormParams("a%5Bb%5D=c&a%5Bd%5D=e"); 
// => {"a":{"b":"c","d":"e"}} 
7

मैं हाल ही में इस बात से निपट रहा हूं: मुझे उस डेटा को पार्स करना पड़ा जिसमें 5 स्तरों तक गहराई से ऑब्जेक्ट हो सकते थे। मुझे कोड को जटिल डेटा दोनों से निपटने में सक्षम होने की आवश्यकता थी, लेकिन यूआरआई को id=213 के रूप में सरल करने में विफल नहीं हुआ।

मैंने Google पर कुछ समय बिताया, इस समस्या के लिए एक (अर्ध-) सुरुचिपूर्ण समाधान खोजने की कोशिश की, और यह प्रश्न दिखाया गया। चूंकि यह 1 दृश्य/दिन (दे या लेने के लिए) मैं यहां अपने समाधान पोस्ट करने के लिए तय कर लिया है हो जाता है, आशा है कि यह किसी को बाहर में मदद करता है:

function form2Json(str) 
{ 
    "use strict"; 
    var obj,i,pt,keys,j,ev; 
    if (typeof form2Json.br !== 'function') 
    { 
     form2Json.br = function(repl) 
     { 
      if (repl.indexOf(']') !== -1) 
      { 
       return repl.replace(/\](.+?)(,|$)/g,function($1,$2,$3) 
       { 
        return form2Json.br($2+'}'+$3); 
       }); 
      } 
      return repl; 
     }; 
    } 
    str = '{"'+(str.indexOf('%') !== -1 ? decodeURI(str) : str)+'"}'; 
    obj = str.replace(/\=/g,'":"').replace(/&/g,'","').replace(/\[/g,'":{"'); 
    obj = JSON.parse(obj.replace(/\](.+?)(,|$)/g,function($1,$2,$3){ return form2Json.br($2+'}'+$3);})); 
    pt = ('&'+str).replace(/(\[|\]|\=)/g,'"$1"').replace(/\]"+/g,']').replace(/&([^\[\=]+?)(\[|\=)/g,'"&["$1]$2'); 
    pt = (pt + '"').replace(/^"&/,'').split('&'); 
    for (i=0;i<pt.length;i++) 
    { 
     ev = obj; 
     keys = pt[i].match(/(?!:(\["))([^"]+?)(?=("\]))/g); 
     for (j=0;j<keys.length;j++) 
     { 
      if (!ev.hasOwnProperty(keys[j])) 
      { 
       if (keys.length > (j + 1)) 
       { 
        ev[keys[j]] = {}; 
       } 
       else 
       { 
        ev[keys[j]] = pt[i].split('=')[1].replace(/"/g,''); 
        break; 
       } 
      } 
      ev = ev[keys[j]]; 
     } 
    } 
    return obj; 
} 

मैं, यह परीक्षण किया है नीचे स्ट्रिंग की तरह डेटा के साथ (4 स्तरों गहरी):

str = "id=007&name[first]=james&name[last]=bond&name[title]=agent&personalia[occupation]=spy&personalia[strength]=women&personalia[weakness]=women&tools[weapons][close][silent]=garrot&tools[weapons][medium][silent]=pistol_supressed&tools[weapons][medium][loud]=smg&tools[weapons][far][silent]=sniper&tools[movement][slow]=foot&tools[movement][far]=DBS"; 

कौन सा बड़े करीने से एक वस्तु देता है, कि, जब JSON.stringify के माध्यम से पारित इस तरह बाहर आता है:

{"id":"007","name":{"title":"agent","first":"james","last":"bond"},"personalia":{"weakness":"women","occupation":"spy","strength":"women"},"tools":{"movement":{"far":"DBS","slow":"foot"},"weapons":{"close":{"silent":"garrot"},"medium":{"silent":"pistol_supressed","loud":"smg"},"far":{"silent":"sniper"}}}} 

यह एक JSlint जांच, गुजरता है जब सफेद स्थान, . औरअनदेखीऔर ++ स्वीकार कर रहा है। सब कुछ, मैं मानता हूं कि स्वीकार्य होना चाहिए।

7

यदि आप नोड या ब्राउज़र का उपयोग कर रहे हैं तो आप qs का उपयोग कर सकते हैं।

var qs = require('qs') 
var encodedString = "CorrelationId=1&PickedNumbers%5B%5D=1&PickedNumbers%5B%5D=2&PickedNumbers%5B%5D=3&PickedNumbers%5B%5D=4" 

console.log(qs.parse(encodedString)) 
// { CorrelationId: '1', PickedNumbers: [ '1', '2', '3', '4' ] } 
2

यह अब Node.js की एक कोर मॉड्यूल है: https://nodejs.org/api/querystring.html#querystring_querystring_parse_str_sep_eq_options

var qs = require('querystring') 

var json = qs.parse('why=not&sad=salad') 
    // { why: 'not', sad: 'salad' } 

भी एन्कोडेड पात्रों के साथ काम करता है:

var json2 = qs.parse('http%3A%2F%2Fexample.com&sad=salad') 
    // { url: 'http://example.com', sad: 'salad' } 
संबंधित मुद्दे