2016-09-19 87 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()方法