2014-12-07 109 views
1

比方说,这是我的JSON(我将无法更改此JSON文件)获取JSON对象从它在列表中的位置

{"success":true, 
"users":{ 
      "1036344647":{"name":"joel", "age":18}, 
      "1036344365":{"name":"klant", "age":24}, 
      "1036344352":{"name":"grabben", "age":23} 
     } 
} 



我也有一个PHP代码,收集此JSON数据并对其进行解码。

$data = json_decode(file_get_contents("http://example.com/users/json")); 



正如你可以在我的JSON每个用户都有一个随机生成的ID,将每次我收集的数据从我的JSON文件更改看到。基本上我不知道任何用户ID。

但我仍然希望能够打印出一个用户名称,具体取决于它在列表中的位置。

例如:echo $ data-> users - > [THE SECOND ID(id为用户名为“klant”)] - > name;

,所以我知道可以这样做很容易,如果JSON文件被写成一个数组,但事实并非如此。
有没有什么办法可以打印出json中的对象,取决于它在列表中的位置?

回答

0

您可以通过“扔掉”的唯一ID与array_values()像这样建立第2个数组:

$array = json_decode($yourJSON, true); 
$justValues = array_values($array["users"]); 
print_r($justValues); 

输出:

Array 
(
    [0] => Array 
     (
      [name] => joel 
      [age] => 18 
     ) 

    [1] => Array 
     (
      [name] => klant 
      [age] => 24 
     ) 

    [2] => Array 
     (
      [name] => grabben 
      [age] => 23 
     ) 

) 

然后,您可以访问诸如所以每个人的数据:

echo $justValues[1]["name"]; // klant 
+0

谢谢队友,这是一个可行的很好的解决方案:d – ubj 2014-12-07 18:21:53

0

不,这是不可能的。 JavaScript设计对象不知道其键值对的“位置”。在幕后,这就是让他们变得强大的原因。

第一步是重新考虑你为什么要需要根据位置使用JSON。

1

试试这个:

function findUser($id) 
{ 
    $data = json_decode(file_get_contents("http://example.com/users/json")); 
    return isset($data[0]->users->$id) ? $data[0]->users->$id : null; 
} 

$user = findUser(1036344365); 

var_dump($user); 

它将输出

object(stdClass)#4 (2) { ["name"]=> string(5) "klant" ["age"]=> int(24) }