【问题标题】:How to convert a JSON string into an array (PHP)?如何将 JSON 字符串转换为数组(PHP)?
【发布时间】:2010-02-26 22:00:02
【问题描述】:

使用下面的代码来解码 json

$categories = json_decode($data);
$categories = $categories->data;

我在哪里得到这个

{"categories":[{"id":1,"name":"Utilities","apps":897,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/uti.jpg"},{"id":2,"name":"Productivity","apps":477,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/pro.jpg"},{"id":3,"name":"Music","apps":466,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/mus.jpg"},{"id":4,"name":"Travel","apps":289,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/tra.jpg"},{"id":5,"name":"Navigation","apps":297,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/nav.jpg"},{"id":6,"name":"Books","apps":271,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/boo.jpg"},{"id":7,"name":"Healthcare & Fitness","apps":250,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/hea.jpg"},{"id":8,"name":"Games","apps":5116,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/gam.jpg"},{"id":9,"name":"Social Networking","apps":272,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/soc.jpg"},{"id":10,"name":"Lifestyle","apps":434,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/lif.jpg"},{"id":11,"name":"Finance","apps":200,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/fin.jpg"},{"id":12,"name":"News","apps":128,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/new.jpg"},{"id":13,"name":"Photography","apps":481,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/pho.jpg"},{"id":14,"name":"Entertainment","apps":1251,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/ent.jpg"},{"id":15,"name":"Business","apps":221,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/bus.jpg"},{"id":16,"name":"Sports","apps":199,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/spo.jpg"},{"id":17,"name":"Education","apps":433,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/edu.jpg"},{"id":18,"name":"Medical","apps":262,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/med.jpg"},{"id":19,"name":"Weather","apps":64,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/wea.jpg"},{"id":20,"name":"Reference","apps":419,"iconurl":"http:\/\/static.apptrackr.org\/caticons\/ref.jpg"}]} 

我想转换成这样的数组

Array[0]
    {
       id => 1
       name => Utilities
       apps => 897
       iconurl => http:\/\/static.apptrackr.org\/caticons\/uti.jpg
    }

等等

【问题讨论】:

    标签: php arrays object


    【解决方案1】:

    这看起来像JSON string。您可以使用json_decode() 将其转换为 PHP 变量,例如

    $obj = json_decode($json);
    print_r($obj->categories); // array of StdClass objects
    

    您可以定期访问和迭代类别数组

    echo $obj->categories[0]->name; // Utilities
    echo $obj->categories[1]->name; // Productivity
    echo $obj->categories[2]->name; // Music
    

    要将 StdClass 对象转换为数组,您可以这样做

    $categories = array();
    foreach (json_decode($json)->categories as $category) {
        $categories[] = (array) $category;
    }
    print_r($categories);
    

    您也可以使用lambda functionarray_map

    // Before PHP5.3
    $categories = array_map(
        create_function('$el', 'return (array) $el;'), 
        json_decode($json)->categories);
    
    // After PHP5.3
    $categories = array_map(
        function($el) { return (array) $el; }, 
        json_decode($json)->categories);
    

    【讨论】:

    • 很抱歉没有声明这个但为了得到这个我使用了 $categories = json_decode($data); $categories = $categories->数据;我在哪里得到了上面的结果,当我尝试使用你的代码时,我在 foreach 上遇到错误,感谢您的帮助
    • @Mahmoud 您提供的对象字符串中没有$categories->data。你得到什么错误?
    • 这里是 print_r(json_decode($categories)); 的链接pastie.org/844979 我的问题是在我使用 $categories = $categories->data; 之后我在 foreach ($arr->categories as $category) { 中遇到的错误
    • @Mahmoud 我不确定你在那里做什么,但json_decode($categories)$categories 会源自你的$categories = json_decode($data); $categories = $categories->data; 工作吗?显然,您在data 中有一个包含 JSON 字符串的对象。
    • 就像我说的,data 包含一个 JSON 字符串,您也需要解码才能将其转换为对象。见糊状。
    【解决方案2】:

    呃,你可以设置第二个参数来将 JSON 转换为数组而不是对象:

    $categories = json_decode($data, true);
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        @Gordon 似乎是正确的 - 看起来像 JSON。但是,假设您正在处理一个“实际的”PHP 对象,那么它将是可迭代的;只需使用foreach 运行它,然后将每个键/值对推送到您的目标数组中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-20
          • 2017-07-20
          相关资源
          最近更新 更多