2011-08-08 64 views
1

我想從javascript for循環創建JSON字符串。這是我試圖做的(這給了我看起來像JSON字符串的東西),但它不起作用。從javascript for循環創建JSON字符串

var edited = ""; 
for(var i=1;i<POST.length-1;i++) { 
    edited += '"'+POST[i].name+'":"'+POST[i].value+'",'; 
} 

它給了我這樣的:

"type":"empty","name":"email-address","realname":"Email Address","status":"empty","min":"empty","max":"empty","dependson":"empty", 

如果我嘗試後來轉換成JSON對象這是行不通的。

+0

什麼是你預期的結果? –

+1

這是我的預期結果:{「type」:「empty」,「name」:「empty」,「realname」:「empty」,「status」:「empty」,「min」:「empty」,「max 「:」 空」, 「dependson」: 「空」, 「比賽」: 「空」}。問題解決了 – Sthe

回答

6

兩個問題:

  • 你想要一個對象,因此JSON字符串與{和啓動以}結尾。
  • 有一個尾隨,可能被認定爲無效。

它可能更好地使用圖書館,而是要糾正你的代碼:

  • 變化var edited = "";var edited = "{";開始你的JSON字符串以{
  • 後添加edited = edited.slice(0, -1); for循環刪除尾隨逗號。
  • 添加edited += "}";前面的語句之後結束您的JSON字符串以}

您的最終代碼如下:

var edited = "{"; 
for(var i=1;i<POST.length-1;i++) { 
    edited += '"'+POST[i].name+'":"'+POST[i].value+'",'; 
} 
edited = edited.slice(0, -1); 
edited += "}"; 

此外,最好通過向使用庫(如JSON.stringify)具有for循環的對象,通過使用POST[i].name作爲鍵和POST[i].value作爲值來添加屬性,然後使用該庫將該對象轉換爲JSON。

而且,你開始用指數1和索引POST.length-2結束,因此不包括指數0(第一值)和POST.length-1(最後一個值)。這是你真正想要的嗎?

+0

謝謝你的工作:-) – Sthe

0

難道你不能只是建立一個散列,並做散列toString?事情是這樣的:

var edited = {}; 
for(var i=0;i<POST.length-1;i++) {  
    edited[POST[i].name] = POST[i].value; 
} 

也許JSON.stringify是你在找什麼:http://www.json.org/js.html

0

您的JSON字符串中有額外的逗號。 JSON字符串格式:{ 「JSON」: 「你好,世界」}

var edited = "{"; 
for(var i=1;i<POST.length-1;i++) { 
    edited += '"'+POST[i].name+'":"'+POST[i].value+'",'; 
} 
// remove last comma: 
edited = edited.substring(0, edited.length-1) + "}"; 
4
//dummy data 
var post=[{name:'name1',value:1},{name:'name2',value:2}]; 

var json=[]; 
for(var i=0;i<post.length;i++) 
{ 
    var temp={}; 
    temp[post[i].name]=post[i].value; 
    json.push(temp); 
} 

var stringJson = JSON.stringify(json); 


alert(stringJson); 

http://jsfiddle.net/3mYux/

+0

謝謝。我在'json.push({POST [i] .name:POST [i] .value});'得到錯誤。它說意想不到的標識符。 – Sthe

+0

編輯我的答案併爲您創建演示! –