【问题标题】:Javascript/Jquery push json objects into arrayJavascript/Jquery 将 json 对象推入数组
【发布时间】:2015-10-25 10:45:41
【问题描述】:

我有一个来自 jquery 中 $.post 的 json 对象。 为了循环并存储数据客户端,我想将它添加到一个数组中。对于返回的每个搜索结果,我想“附加”数组以使其增长。

这是我的 json:

    {
"companies": [
{
  "companyid": "115",
  "saved": false,
  "orgnumber": "010101010",
  "companyname": "TestCompany",
  "header": "header info"
  },      
  {
  "companyid": "116",
  "saved": false,
  "orgnumber": "010101010",
  "companyname": "TestCompany",
  "header": "header info"
  } ]
      }

这就是我到目前为止想出的数据是 json 从 post ajax 请求回来。 Obj 只是一个持有数组的对象 我在我的代码中进一步声明。 obj.companies = new Array();

   obj.companies.push(data['companies']);

下一部分我需要循环出数组。尝试这样做。

     $.each(obj.companies, function(i, item) {      

       // Does not alert correctly.
       alert(item.header);

     });

所以我需要将完整的 json 对象推送到数组中。但是我无法在循环中提醒 item.header,我该如何完成呢?

编辑: 谢谢大家。对不起,如果我的问题不够详细。 我最终这样做了:

        getcompanies: function() {
          obj = this;
          $.post('api/finder/result.php', {}, function(data) {
                $.each(data.companies, function(i, item) {      
                    obj.companies.push(item);
                });             
                obj.loadcompanies();                        
          }, "json");
       },


        loadcompanies: function() {
           $.each(this.companies, function(i, item) {       
             alert(item.header);
          }
        }

【问题讨论】:

  • 我不太清楚你想做什么或为什么。为什么要在尝试将 json 添加到看起来与您刚刚字符串化的 json 具有相似结构的对象之前对 json 进行字符串化?你真正追求的结构是什么?
  • 什么是实际问题?
  • 另外,证明 JSON 无效。
  • 只要您的obj 具有您所指的数组 ({sresult: {companies: []}}),您发布的内容应该会遍历您推送的数据,但您正在发布的数据push 将是一个 string 包含 JSON 中的所有内容。
  • 当然有问题,否则我不会问这个问题。

标签: javascript jquery arrays json


【解决方案1】:

我相信您的服务器端代码存在问题,该代码负责构建通过 Ajax 返回的 JSON 对象。正确的 JSON 应该如下:

{
    "companies": [
        {
            "companyid": "115",
            "saved": false,
            "orgnumber": "010101010",
            "companyname": "TestCompany",
            "header": "header info"
        },
        {
            "companyid": "116",
            "saved": false,
            "orgnumber": "010101010",
            "companyname": "TestCompany",
            "header": "header info"
        }
    ]
}

请注意,只有一个名为“companies”的键包含一组对象。请更正您的服务器端代码以获得如此有效的 JSON。您可以使用免费的在线 JSON 验证器工具(例如 http://jsonlint.com/)来验证您的 JSON 对象。

现在,一旦您从服务器收到此类响应;您只需要执行以下步骤即可获取公司数组(以下代码将进入$.post 成功处理程序):

var jsonResp = JSON.parse(postResponse); //postResponse is the success resp of $.post
var companiesArray =  jsonResp.companies;
$.each(companiesArray , function (index, valueObj){
    var compId = valueObj.companyid;
    var isSaved = valueObj.saved;
});

希望对你有所帮助。

【讨论】:

  • 谢谢!很棒的东西,它有帮助,我终于做了一个循环并将其推送到公司数组中。
【解决方案2】:

如果你想将新公司添加到你的公司数组中,你应该

var json_obj =   {
"companies": [
{
  "companyid": "115",
  "saved": false,
  "orgnumber": "010101010",
  "companyname": "TestCompany",
  "header": "header info"
  },
  {
  "companyid": "116",
  "saved": false,
  "orgnumber": "010101010",
  "companyname": "TestCompany",
  "header": "header info"
  } ]
  };

  //adding new company into your companies array
  json_obj.companies.push({
     "companyid":"117",
     "saved" : false,
     "orgnumber": "20120313",
     "companyname":"anotherCompany",
     "header":"another header info"
  });

  //if you want to loop through your companies list you can:

  json_obj.companies.map(function ( obj ){
     console.log(obj.companyid);
     console.log(obj.companyname);
     etc..
  });

【讨论】:

  • 是的,正确,我发布了格式错误的 json。我注意到我没有得到问题中描述的 json。
猜你喜欢
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 2018-11-08
  • 1970-01-01
  • 2015-10-19
  • 2017-06-24
相关资源
最近更新 更多