2011-08-26 58 views
2

我有以下字符串从用户进来,需要把它变成JSON。如何将此字符串转换为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" 
     } 
    } 
} 

我不确定从哪里开始,所以任何帮助表示赞赏!

+2

你想这样做在JavaScript或服务器端像PHP这样的语言? – Shef

+3

代表JSON对我来说似乎无效 –

+0

对不起,我想在JavaScript中执行此操作...我将更新该问题。 –

回答

2

您可以使用此代码:

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写的你是不是有效的,因为它的字段必须具有唯一的名称。我使用的名称如round0round1 ...和interval0等。

+0

正确的方法是制作一系列的回合,但是+1。可能很高兴重写OP。 –

0

将字符串拆分为“|”以获得新一轮,然后将每个子字符串拆分为“,”以获得该轮的间隔。

因此,您可以轻松创建一个JavaScript映射,然后使用Map to JSON转换来获取所需的JSON。

0

您提供的格式不是有效的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" } 
    ] 
] 

在旧的浏览器,你将需要es5-shimmap,和json2.jsJSON.stringify

0

我不知道多少,这会帮助你,但它正是你需要的:

<script> 
    var string = "2r,5g|3b,2r,4y|3g"; 
    var inSplit = string.split('|'); 

    var myJson = "rounds = { "; 

    for (var one = 0; one < inSplit.length; one++){ 
     var inOne = inSplit[one].split(','); 
     myJson = myJson + '\n "round" : {'; 
     for (var rnd = 0; rnd < inOne.length; rnd++){ 
      val = inOne[rnd].split(''); 
      myJson = myJson + '\n  "interval" : {'; 
      myJson = myJson + '\n   "time" : "'+val[0]+'",'; 
      myJson = myJson + '\n   "color" : "'+val[1]+'"'; 
      myJson = myJson + '\n  }'; 
      if(inOne.length > (rnd+1)){ 
       myJson = myJson + ','; 
      } 
     } 
     myJson = myJson + '\n }'; 
     if(inSplit.length > (one+1)){ 
      myJson = myJson + ','; 
     } 
    } 
    myJson = myJson + '\n}'; 
    document.write(myJson); 
</script> 

看待jsfiddle

相关问题