2013-04-05 86 views
1

在php中編寫一個網站,從另一個php-api創建JSON字符串。 字符串看起來是這樣的:在PHP中獲取JSON對象,而不是數組

{ 
    "result": "true", 
    "results": { 
     "20": { 
      "id": "20", 
      "desc": "a b ct tr", 
      "active": "1", 
      "startdate": "2013-04-03", 
      "starttimehour": "18", 
      "starttimemin": "0", 
      "enddate": "2013-04-03", 
      "endtimehour": "22", 
      "endtimemin": "0", 
      "creator": "a" 
     }, 
     "21": { 
      "id": "21", 
      "desc": "test", 
      "active": "0", 
      "startdate": "2013-04-04", 
      "starttimehour": "18", 
      "starttimemin": "0", 
      "enddate": "2013-04-04", 
      "endtimehour": "22", 
      "endtimemin": "0", 
      "creator": "a" 
     } 
    } 
} 

香港專業教育學院找到了許多關於如何不使用數組這裏從JSONarray但是我獲取信息的答案。 所以問題是:我如何獲得標記爲20,21等的對象(這些數字是由服務器生成的,因此我不知道哪些將被返回)。

或者我應該重寫我的api如何以數組的形式返回JSON。事情是這樣的:

{"result"="true", "results":[{...},{...},{...}]} 
+0

不清楚你需要做什麼...... PHP和JS/JSON使用te rm「數組」來描述不同的事情。 PHP的「數組」包含數字數組(JavaScript的'[]')和關聯數組(JavaScript的''}')。使用'json_decode($ input)'會給你一個對象,使用'json_decode($ input,true)'會給你一個關聯數組。無論如何,我建議將'results'作爲數值數組返回。 – DCoder 2013-04-05 11:41:18

+0

感謝所有的答案,它幫助解析json。 另一個PHP頁面存在另一個問題,它看起來像它的字符串中添加了一些東西,使得json_decode()返回NULL:S – 2013-04-05 12:38:41

回答

2
$json = json_decode($json_string, True); 
foreach($json['results'] as $key => $value) { 
    // access the number with $key and the associated object with $value 
    echo 'Number: '.$key; 
    echo 'Startdate: '.$value['startdate']; 
} 
+1

將$ json ['results']更改爲$ json-> results,但是您的代碼不會反正工作。 :) – Alex 2013-04-05 11:47:43

+1

你是對的,我混淆了所有這些語法混淆。編輯完成,爲關聯數組添加TRUE :-( – Imperative 2013-04-05 11:58:29

0

我假設你正在通過POST JSON的不帶任何參數,如

curl http://someapi.somedomain/someresource/ -X POST -d @data.json 

所以基本上

$data = file_get_contents('php://input'); 
$object = json_decode($data); 
print_r($object); 

應該解決您的問題。而$ object就是你發佈的json對象。

0

您確實將JSON響應作爲字符串獲取。這正是JSON的工作方式。爲了將數據「轉換」爲易於訪問的格式和結構,可以使用名爲json_decode()的PHP函數。

您使用該功能時有兩種選擇 -

  1. 將數據轉換成一個數組。 json_decode($jsonString,true)
    如果您使用此方法,您將像訪問關聯數組一樣訪問數據。 $jsonArray['results']['21']

  2. 將數據轉換爲對象。 json_decode($jsonString)
    使用這種方法,你可以使用對象符號來遍歷數據 -
    $num = 21;
    $jsonObj->results->$num

0

首先您解碼字符串($字符串),那麼你可以依次通過,並得到所有屬性的對象。請記住,訪問屬性是使用 - > prop而不是['prop']。這樣你就不必以數組的方式處理它。

$jsoned = json_decode($string); 
    foreach($jsoned->results as $o) { 
     foreach($o as $key => $value) { 
      echo "The key is: ".$key." and the value is: ".$value."<br>"; 
     } 
    } 

工作示例究竟會打印出:

主要是:ID和值爲:20

主要是:遞減和值是:AB CT TR

主要是:活躍值爲:1

etc ...

相關問題