2013-04-05 126 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 ...

相关问题