2014-09-22 80 views
1

我要生成的JSON值正是像這樣一個在這裏生成JSON不使用PHP和MySQL

{ 
    "feed": [ 
     { 
      "id": 1, 
      "name": "National Geographic Channel", 
      "image": "http://api.androidhive.info/feed/img/cosmos.jpg", 
      "status": "\"Science is a beautiful and emotional human endeavor,\" says Brannon Braga, executive producer and director. \"And Cosmos is all about making science an experience.\"", 
      "profilePic": "http://api.androidhive.info/feed/img/nat.jpg", 
      "timeStamp": "1403375851930", 
      "url": null 
     }, 
     { 
      "id": 2, 
      "name": "TIME", 
      "image": "http://api.androidhive.info/feed/img/time_best.jpg", 
      "status": "30 years of Cirque du Soleil's best photos", 
      "profilePic": "http://api.androidhive.info/feed/img/time.png", 
      "timeStamp": "1403375851930", 
      "url": "http://ti.me/1qW8MLB" 
     } 
    ] 
} 

每次我嘗試做這樣的事我結束了這個輸出時間斜線

{ 
    "feed": [{ 
     "id": "1", 
     "name": "National Geographic Channel", 
     "image": "http:\/\/api.androidhive.info\/feed\/img\/cosmos.jpg", 
     "status": "Science is a beautiful and emotional human endeavor", 
     "profilePic": "http:\/\/api.androidhive.info\/feed\/img\/nat.jpg", 
     "timeStamp": "1403375851930", 
     "url": "null" 
    }, { 
     "id": "2", 
     "name": "National Geographic Channel", 
     "image": "http:\/\/api.androidhive.info\/feed\/img\/cosmos.jpg", 
     "status": "Science is a beautiful and emotional human endeavor", 
     "profilePic": "http:\/\/api.androidhive.info\/feed\/img\/nat.jpg", 
     "timeStamp": "1403375851930", 
     "url": "null" 
    }] 
} 

看看第一JSON的ID和網址 我希望我的JSON是完全一樣的第一個

我的PHP代碼:

<meta http-equiv="Content-Type" content="application/json; charset=utf-8 "> 
<?php 

include "../funcs/db.php"; 
$SelectPosts = mysql_query("SELECT * FROM usf_mobile"); 
$rows = array(); 
    while($r = mysql_fetch_assoc($SelectPosts)) { 
    $rows['feed'][] = $r; 
    } 

print json_encode($rows); 

?> 

我試圖解決方案的很多在這裏計算器,我沒有找到任何一個誰可以接近我的問題。

+0

將類型轉換爲int類型的id值賦給$ id =(int)$ id; – 2014-09-22 18:36:43

+0

首先爲什麼它應該是這樣的**完全**? – 2014-09-22 18:37:26

+0

你需要看看爲編碼http://php.net/manual/en/json.constants.php添加選項,至少將幫助使用JSON_UNESCAPED_SLASHES – 2014-09-22 18:38:29

回答

2

使用(int)將ID值轉換爲整數,並使用JSON_UNESCAPED_SLASHES轉義URL斜槓;

<meta http-equiv="Content-Type" content="application/json; charset=utf-8 "> 
<?php 

include "../funcs/db.php"; 
$SelectPosts = mysql_query("SELECT * FROM usf_mobile"); 
$rows = array(); 
    while($r = mysql_fetch_assoc($SelectPosts)) { 
    $r['id'] = (int)$r['id']; 
    $rows['feed'][] = $r; 
    } 

print json_encode($rows,JSON_UNESCAPED_SLASHES); 

?> 

希望這會有所幫助。

+0

太棒了:D工作,但URL的 – 2014-09-22 18:41:05

+0

剛剛編輯答案。 – worldofjr 2014-09-22 18:41:51

+0

謝謝你真棒,將在5分鐘內做出正確答案:) – 2014-09-22 18:43:51

2

您正在使用mysql_query()(您不應該這樣做,因爲它已被棄用)。問題在於你沒有辦法將列綁定到值類型(字符串,整數等)。一切都以字符串形式返回。

我建議使用mysqliPDO,您可以在綁定它們時指定列類型。沒有這個,你需要在編碼爲JSON之前手動轉換你的值。

+0

thx爲筆記親,但im在這裏問關於JSON,而不是關於MySql :) – 2014-09-22 18:43:25

+0

@YoussefAlSubaihi是的,但你的問題在於,特別是當用MySQL_query()所有的值從MySQL讀取數據的事實被視爲串。您需要理解這一點,根據預期實際構建您的數據結構並將其序列化(在本例中爲JSON),而不是像在序列化過程中嘗試處理數據一樣其他答案。 – 2014-09-22 18:45:56

+0

所以你說的是,如果我使用mysqli或pdo,我將不需要使用JSON_UNESCAPED_SLASHES?或''(int)$ r ['id'];''? – 2014-09-22 18:48:09

1

如果你有php 5.4+,你可以使用JSON_UNESCAPED_SLASHESJSON_NUMERIC_CHECK來得到你想要的結果。

json_encode($array, JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK) 

你可以在手冊頁中找到所有這些信息,以獲取json_encode

2

嘗試下面的例子,如果你使用的是PHP 5.4+

$rows = json_encode($rows,JSON_NUMERIC_CHECK | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT); 

對於較低的版本,你可以你的陣列,從而獲得所需結果強制類型轉換值。