在JSON数据对象中选择数据的最佳方法是什么?

时间:2012-03-12 15:28:35

标签: jquery json

我正在调用一个JSON对象,并在Firebug中返回此响应:

"[{\"employee\":{\"account_id\":1,\"active\":true,\"activity_ical_hash\":\"af2d0f784ce28bc16d6fdf593d3e4bc7\",\"address\":null,\"admin\":false,\"all_tasks_ical_hash\":\"d4067eceea22b2f281c65f22ccc7820f\",\"always_send_daily_schedule\":true,\"api_token\":\"8d4ab012505392a25d1469e33945d9b05365eedb\",\"can_login\":true,\"cell_phone\":null,\"city\":null,\"created_at\":\"2012-02-20T09:41:27-08:00\",\"custom_datetime1\":null,\"custom_datetime10\":null,\"custom_datetime2\":null,\"custom_datetime3\":null,\"custom_datetime4\":null,\"custom_datetime5\":null,\"custom_datetime6\":null,\"custom_datetime7\":null,\"custom_datetime8\":null,\"custom_datetime9\":null,\"custom_number1\":null,\"custom_number10\":null,\"custom_number2\":null,\"custom_number3\":null,\"custom_number4\":null,\"custom_number5\":null,\"custom_number6\":null,\"custom_number7\":null,\"custom_number8\":null,\"custom_number9\":null,\"custom_text1\":null,\"custom_text10\":null,\"custom_text2\":null,\"custom_text3\":null,\"custom_text4\":null,\"custom_text5\":null,\"custom_text6\":null,\"custom_text7\":null,\"custom_text8\":null,\"custom_text9\":null,\"email_address\":\"mckenna_moore@schumm.org\",\"email_schedule_daily\":true,\"employee_number\":4,\"hashed_password\":\"cbc689313dfd6fd144f7df117c4f18e1627afde4\",\"hide_pricing\":null,\"home_phone\":null,\"id\":4,\"is_account_owner\":false,\"jobs_ical_hash\":\"d51abd7af0326083f9d25c4aacc828c0\",\"limit_access_to_assignments\":false,\"name\":\"Horacio Johnson\",\"notification_email_address\":\"tyrell.bartoletti@donnellyerdman.biz\",\"notification_mobile_host\":null,\"notification_mobile_number\":null,\"notify_on_tasks\":true,\"notify_on_tasks_by_sms\":true,\"notify_via_email\":true,\"notify_via_mobile\":false,\"pager\":null,\"public_tasks_ical_hash\":\"592b2d4150ef46821c2ae8df63ca686d\",\"remember_me_token\":null,\"remember_me_token_expires_at\":null,\"salt\":\"35f1a3c4\",\"show_setup_tab\":null,\"state\":null,\"tech\":true,\"updated_at\":\"2012-02-20T09:41:27-08:00\",\"username\":\"user_marguerite\",\"zip_code\":null}}]"

在每个返回的元素中返回name属性需要什么语法?

我尝试了这个,但它没有用

$.getJSON(window.location.pathname+'.json?employees='+$("input").attr('value'), function(data){

           $available_names = []
              $.each(data, function(i, val) {
                $name = val.name;
                $available_names.push($name);
              });

});

任何人都知道为什么这不起作用?

更新

尝试在此方法上添加错误处理程序,但这甚至都不会运行。由于某些语法原因,它失败了:

$.getJSON(window.location.pathname+'.json?employees='+$("input").attr('value'), function(data){

}).error(function() { alert("error"); });

2 个答案:

答案 0 :(得分:1)

根据您的JSON结构判断您是否希望这样做:

$name = val.employee.name

答案 1 :(得分:1)

您的数据采用数组结构。它看起来好像是一个员工对象数组。

要获取每个员工的姓名,您需要访问每个对象的employee属性。

  $.each(data, function(i, val) {
    $name = val.employee.name;
    $avaiable_names.push($name);
  });

...但如果您正在构建数组,则可以使用$.map代替......

  var $avaiable_names = $.map(data, function(val, i) {
      return val.employee.name;
  });

如果仍然无效,请检查您的JSON是否正在进行双重编码。有一些关于Firebug输出的东西让我觉得可能就是这种情况。

您可以通过再次解析响应来测试这一点,例如......

data = $.parseJSON(data);

如果它开始工作,那么它肯定会在服务器上进行双重编码,因此您需要修复它。