从javascript for循环创建JSON字符串

时间:2011-08-08 07:45:48

标签: javascript string json loops for-loop

我想从javascript for循环创建一个JSON字符串。这是我试图做的(它给了我一些看起来像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对象,则不起作用。

4 个答案:

答案 0 :(得分:6)

两个问题:

  • 您需要一个对象,因此JSON字符串必须以{开头,以}结尾。
  • 有一个尾随,,可能会被视为无效。

使用库可能更好,但要更正代码:

  • var edited = "";更改为var edited = "{";以使用{
  • 启动您的JSON字符串
  • 在for循环后添加edited = edited.slice(0, -1);以删除尾随逗号。
  • 在上一个语句后添加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(最后一个值)。那是你真正想要的吗?

答案 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/

答案 2 :(得分: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

答案 3 :(得分:0)

您的JSON字符串中有额外的逗号。 JSON字符串格式:{“JSON”:“Hello,World”}

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) + "}";