如何从简单的对象文字中提取变量?

时间:2012-12-24 23:20:38

标签: ajax json

我创建了我的第一个AJAX-JSON项目而没有发布任何(愚蠢)问题,除了这个小问题:

function processEvent(data)  {  
var evt = $(data).text();
   } 

当我写警报(evt);我看到以下内容:

{meat:'beef',vegetable:'carrots',potato:'mashed'}

我可以使用以下代码从变量'evt'中提取'beef'这个词:

  evt.substr(7,4)

但如果我写:

  evt.meat

我收到错误:未定义。如何在不诉诸字符串操作的情况下直接检索变量'meat'的值?

4 个答案:

答案 0 :(得分:1)

这是因为此时您特意将evt作为字符串。取决于data表示的内容(JSON字符串数据或已从JSON解析的对象,或DOM节点 - 我无法分辨哪些代码示例中没有更多上下文),您可能需要执行某些操作获得一个对象表示。您至少可以将字符串解析为JSON:

var evt = JSON.parse($(data).text());

我的猜测是你可能已经有了一个对象表示,你通过调用text()将它变成一个字符串,所以这里可能会有一些不必要的序列化/反序列化。

答案 1 :(得分:1)

您需要使用JSON.parse()将JSON字符串转换为相应的数据。

var evt = JSON.parse($(data).text());
console.log(evt.meat);

jQuery可以自动为您执行此操作。之一:

  1. 致电$.getJSON()以执行AJAX通话。
  2. 在AJAX调用的options参数中指定dataType: 'json'
  3. 服务器发送标题'Content-type:application / json'

答案 2 :(得分:1)

如果您的evt数据是JSON,则可以解析它并获取肉类属性。目前不是,这个{meat:'beef',vegetable:'carrots',potato:'mashed'}作为JSON将是{"meat":"beef","vegetable":"carrots","potato":"mashed"}。注意使用双引号而不是单引号,并且还引用了属性。

function processEvent(data)  {  
var evt = $(data).text();// === {"meat":"beef","vegetable":"carrots","potato":"mashed"}
    evtObj = $.parseJSON(evt);
    alert(evtObj.meat); //shows beef
} 

答案 3 :(得分:0)

var obj = JSON.parse(data);
var val = obj['meat'];