2012-03-12 63 views
0

我打电话JSON对象,并在Firebug返回此响应:在JSON数据对象中选择数据的最佳方式是什么?

"[{\"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\":\"[email protected]\",\"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\":\"[email protected]\",\"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"); }); 
+0

有任何错误?你错过了 ;在$ available_names = [] – 2012-03-12 15:31:55

+0

无结尾。我也试图做一个简单的警报,并返回'undefined'。 – Trip 2012-03-12 15:32:32

+0

将此添加到您的getJSON调用的结尾处,并查看您是否获得了某些内容:.error(function(){alert(“error”);}) – 2012-03-12 15:35:55

回答

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); 

如果它开始工作,那么它肯定是被双重编码,在服务器上,所以你要修复那。

+0

太奇怪了,我完全认为这会奏效。但没有任何反应。 – Trip 2012-03-12 15:48:03

+0

@Trip:查看我添加的答案的底部。 Firebug输出使它看起来像响应被双重编码。试试'$ .parseJSON'这一行,如果清除它,那么你会想在服务器端修复它。 – 2012-03-12 15:49:02

+0

关于双解析..我得到一个错误,说'j是空',这让我觉得它不是双解析,这只是萤火虫转换为一个字符串。 – Trip 2012-03-12 15:49:55

1

你的JSON结构来看你想要做的:

$name = val.employee.name 
相关问题