【问题标题】:Create JSON string from javascript for loop从 javascript for 循环创建 JSON 字符串
【发布时间】:2011-08-08 07:45:48
【问题描述】:

我想从 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 对象,这将不起作用。

【问题讨论】:

  • 您的预期结果是什么??
  • 这是我的预期结果:{"type":"empty","name":"empty","re​​alname":"empty","status":"empty","min" :"empty","max":"empty","dependson":"empty","matches":"empty"}。问题解决了

标签: javascript string json loops for-loop


【解决方案1】:

两个问题:

  • 您需要一个对象,因此 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(最后一个值)。这真的是你想要的吗?

【讨论】:

    【解决方案2】:
    //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/

    【讨论】:

    • 谢谢。我在json.push({POST[i].name:POST[i].value}); 遇到错误。它说意外的标识符。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      你不能建立一个散列然后在散列上做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

      【讨论】:

        猜你喜欢
        • 2017-07-10
        • 2021-02-02
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-11
        • 2021-09-11
        • 1970-01-01
        相关资源
        最近更新 更多