2016-09-19 91 views
0

我后,我把它使用jQuery AJAX返回按以下格式数据的API:转换数据

API调用

$.get("displayapi.php",function(data){ 
     var json=data; 
     console.log(json);}); 

登录控制台

{ 
"listing": { 
    "id": "7", 
    "name": "Nina Randy", 
    "product": "Studio Apartment for Rent ", 
    "email": "[email protected]", 
    "phone": "2147483647", 
    "des": "Apartment near Foggy Bottom metro station for rent. Available from  May 2016. Please contact for more details", 
    "cost": "3000", 
    "category": "apartments", 
    "date": "2016-04-24", 
    "pic": "unnamed.jpg" 
} 
}{ 
"listing": { 
    "id": "6", 
    "name": "Jay Sean", 
    "product": "Parking Spot near Gelman Library", 
    "email": "[email protected]", 
    "phone": "2147483647", 
    "des": "Parking spot located near foggy bottom metro station for sharing. Please contact for availability. ", 
    "cost": "1000", 
    "category": "parking", 
    "date": "2016-04-18", 
    "pic": "1002240-13-20160117082202.jpeg" 
} 
} 

它显示在对象格式的内容,但不是一个真正的对象。我如何将其转换为JSON对象,以便可以访问对象的各个属性。

+1

那是完全匹配的字符串? B/C不是有效的JSON,除非这是个问题? – noahnu

+0

我减少了一些放在这里的数据。该符号可能是一个托架关闭或使 – Arihant

+0

如果它是有效的JSON(例如,您的“上市”项目是在一个数组),你可以做'VAR OBJ = JSON.parse(数据);' – noahnu

回答

0

你可以只调用JSON.parse()来对PHP像这样返回的字符串:

$.get("displayapi.php",function(data){ 
     var dataObject = JSON.parse(data); 
}); 

但你的返回值不是一个有效的JSON - 你真的不能让一个 - 请尝试以下方法:

$.get("displayapi.php",function(data){ 
     var dataObject = eval(data); 
}); 
+0

第二种方法似乎有点冒险,特别是如果你没有完全控制displayapi脚本(如果OP有控制权,我认为它将被正确格式化为JSON)。我不认为''eval''会“解析”OP发布的任何一种方式。 – noahnu

+0

的确,我想他的唯一选择是在那里返回一个有效的JSON。尽管他应该能够逐一评估这些项目,但他的php输出的当前格式太奇怪了+它完全不安全 –

0

您应该将您的响应数据解析为javascript json对象,如下所示;

$.get("displayapi.php",function(data){ 
    var json=data; 
    var obj = JSON.parse(data); 
    //iterate lsiting.... 
    $.each(obj.listing, function(i){ 
     console.log(obj.listing[i].name); 
    }) 
}); 
0

jQuery有)称为$ .parseJSON(原生功能,将JSON字符串转换为对象。

http://api.jquery.com/jquery.parsejson/

$.get("displayapi.php",function(data){ 
    var json=data; 
    console.log(json); 
    var JSONdata = $.parseJSON(json); 
    console.log(JSONdata.listing.id); 
}); 
0

如果检查控制台响应标头,可以看到内容类型设置为 “text/html的;”这就是为什么你在解析响应时遇到问题的原因。

首先,使用$.getJSON代替$.get

你能在你的displayapi.php设置适当的内容类型为好。例如:

<?php 
$data_array = array(); // The array you want to serialize 
header('Content-Type: application/json'); 
echo json_encode($data_array); 
?> 

这样你就可以避免再次使用javascript解析响应。现在,您可以再次检查控制台,可以看到,内容类型设置为“应用/ JSON”

请测试,并让我知道,如果这是工作。

0

我建议哟使用$.getJSON()方法GET JSON数据.. jQuery的照顾有关此方法解析JSON数据

$.getJSON("displayapi.php",function(json){ 
    $.each(json.listing, function(i){ 
     console.log(obj.listing[i].name); 
    }) 
}); 

参考$.getJSON()方法