从列表中的位置获取json对象

时间:2014-12-07 17:37:17

标签: php 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-> [第二个ID(用户名为&#34的id; klant")] - > name;   

所以我知道如果将json文件写成数组,这可以很容易地完成,但事实并非如此。
有什么方法可以根据它在列表中的位置打印出json中的对象吗?

3 个答案:

答案 0 :(得分: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) }

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以通过array_values()“抛弃”这些唯一ID来构建第二个数组,如下所示:

$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