Javascript 如何将此字符串转换为JSON?
我需要使用JSON将这个字符串序列化为多维数组。你会怎么做 {frmb[0][cssClass]=textarea&frmb[0][required]=true&frmb[0][value]=para&frmb[1][cssClass]=radio&frmb[1][title]=rdo&frmb[1][values][2][value]=one&frmb[1][values][3][value]=two&frmb[1][values][3][baseline]=false&frmb[2][cslass]=false&frmb[2][required]=input&frmb[2][text][3] [cssClass]=checkbox&frmb[3][required]=true&frmb[3][title]=chk&frmb[3][values][2][value]=chk+1&frmb[3][values][3][value][value]=chk+2&frmb[3][values][3][baseline][false&frmb[4][cssClass]=select&frmb[4][required][false&frmb[4][multiplex][true&frmb[4][title][value][sel&frmb[4][value][value][4][value][2][value]=sel&frmb[4][value][4][=true&frmb[4][values][3][value]=sel2&frmb[4][values][3][baseline]=false&form_id=undefined} 编辑: 在将这个字符串转换为JSON时,多维性真的让我抓狂。我尝试去掉括号来获得数组的索引列表,但以一种有用的方式重建数组是最大的挑战 所以我一直在做:Javascript 如何将此字符串转换为JSON?,javascript,jquery,json,Javascript,Jquery,Json,我需要使用JSON将这个字符串序列化为多维数组。你会怎么做 {frmb[0][cssClass]=textarea&frmb[0][required]=true&frmb[0][value]=para&frmb[1][cssClass]=radio&frmb[1][title]=rdo&frmb[1][values][2][value]=one&frmb[1][values][3][value]=two&frmb[1][values][3][baseline]=false&frmb[2][csl
private static List<string> StripBrackets(string input)
{
var ret = new List<string>();
var indx = 0;
do
{
input = input.TrimStart('[');
indx = input.IndexOf(']');
if(indx !=-1)
{
var newVal = input.Substring(0, indx);
ret.Add(newVal);
input = input.Remove(0, indx+1);
}
} while (indx != -1);
//-- this is where I bonked
string[,] results = new string[ret.Count, 23];
foreach (var r in ret)
{
}
return ret;
}
我已经在这个问题上苦思冥想了很长一段时间,因此我提出了一个疲惫/有限的问题。我开始觉得我在艰难地做这件事,并想看看是否有任何开明的人有更好的想法。TIA进一步阐述@ratchetfreak的评论:
var str = "{frmb...";
//sanitize string
str = str.substring(1, str.length-1); //remove braces
str = str.replace(/\[([a-z]+)\]/gi, '["$1"]'); //enclose non-numeric keys in double quotes
str = str.replace(/=([^&]+)/g, '="$1"'); //enclose values in double quotes
str = str.replace(/"(true|false)"/g, "$1"); //remove double quotes around boolean values
str = str.replace(/&/g, ";"); //replace all ampersands with semi-colons
//initialize "frmb"
var frmb = [];
for (var i = 0; i < 5 /* a guess as to how long "frmb" will be */; i++){
var values = [];
for (var j = 0; j < 5 /* a guess as to how long each "values" field will be */; j++){
values.push({});
}
frmb.push({values:values});
}
//evaluate as Javascript
eval(str);
//marshal to string
var result = JSON.stringify(frmb);
使此解决方案难以通用的部分是,您需要初始化frmb。例如,您不能调用frmb[0].cssClass,而无需先将frmb初始化为数组,然后使用push将对象添加到该数组中。因此,您需要估计frmb的大小,以及每个值子数组的大小。您可以使用json2在javascript中序列化:@Mansfield它不是有效的JSON。json2会转换它吗?如果您可以列出您需要转换的内容我试过了,你的想法是我们真的可以提供更多帮助,我们中的任何人在不知道你为什么要解决这个问题的情况下胡乱回答是没有意义的。或者,请某人为你设计一个完整的方法并不真的适合问答,因为没有你提供的更多细节,没有一个答案是正确的。我知道我会怎么做,但我不知道你在挣扎什么。如果它不是有效的JSON,你将不得不手动执行。但一旦你使字符串在语法上有效,json2将很容易将其转换为数组。在javascript中:var frmb=[];evalstr.replace&,;;result=JSON.stringifyfrmb谢谢。我仍在努力解决这个问题,但您已经让我找到了一个解决方案。这几乎可以工作,但它没有反序列化到对象中,因为字段值可以是字符串或数组。您知道如何避免这种情况吗?[values:Description,cssClass:textarea,required:false},{values:[{value:Extra%20Cheese,baseline:false},{value:Pepperoni,baseline:false},{value:Beef,baseline:false}],cssClass:checkbox,required:false,title:Whats%20on%20your%20pizza%3F}]无需担心,这似乎能起作用: