2011-08-26 77 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

相關問題