我有来自用户的以下字符串,需要将其转换为JSON。
2r,5g|3b,2r,4y|3g我想用JavaScript把它转换成JSON。下面是我想要的JSON的样子:
rounds = {
"round" : {
"interval" : {
"time" : "2",
"color" : "r"
},
"interval" : {
"time" : "5",
"color" : "g"
}
},
"round" : {
"interval" : {
"time" : "3",
"color" : "b"
},
"interval" : {
"time" : "2",
"color" : "r"
},
"interval" : {
"time" : "4",
"color" : "y"
}
},
"round" : {
"interval" : {
"time" : "3",
"color" : "g"
}
}
}我真的不确定从哪里开始,所以任何帮助都是感激的!
发布于 2011-08-26 15:06:53
您可以使用以下代码:
var strRounds = "2r,5g|3b,2r,4y|3g";
var roundsSplit = strRounds.split("|");
var rounds = {};
for (var i = 0; i < roundsSplit.length; i++){
var intervalsSplit = roundsSplit[i].split(",");
if (intervalsSplit.length > 0){
rounds["round" + i] = {};
}
for (var j = 0; j < intervalsSplit.length; j++){
rounds["round" + i]["interval" + j] = {
"time": intervalsSplit[j][0],
"color": intervalsSplit[j][1]
};
}
}但是我不得不说,您编写的JSON是无效的,因为它的字段必须有唯一的名称。我用过像round0,round1这样的名字。以及interval0等等。
发布于 2011-08-26 15:09:55
您提供的格式不是有效的JSON,因为您有多个相同密钥的实例。下面是一种更合理的尝试,通过使用数组而不是具有同一键的多个实例的对象:
function userStringToJSON(userString) {
var arrayOfRounds = userString.split("|").map(function (roundString) {
return roundString.split(",").map(function (intervalString) {
var time = parseInt(intervalString, 10) + "";
var color = intervalString.substring(time.length);
return { time: time, color: color };
});
});
return JSON.stringify(arrayOfRounds);
}然后userStringToJSON("2r,5g|3b,2r,4y|3g")给出字符串:
[[{"time":"2","color":"r"},{"time":"5","color":"g"}],[{"time":"3","color":"b"},{"time":"2","color":"r"},{"time":"4","color":"y"}],[{"time":"3","color":"g"}]]给出的对象数组的JavaScript数组
[
[
{ time: "2", color: "r" },
{ time: "5", color: "g" }
],
[
{ time: "3", color: "b" },
{ time: "2", color: "r" },
{ time: "4", color: "y" }
],
[
{ time: "3", color: "g" }
]
]发布于 2011-08-26 14:57:28
在"|“上拆分字符串以获得新一轮,然后在",”上拆分每个子字符串以获得该轮的间隔。
因此,您可以轻松地创建一个javascript映射,然后使用Map to JSON转换来获得所需的JSON。
https://stackoverflow.com/questions/7201019
复制相似问题