如何将一个JSON字符串转换成数组(PHP)?

4

使用以下代码解码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
    }

等等其他

4个回答

6

这看起来像是一个JSON字符串。你可以使用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函数array_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->data;当我尝试使用您的代码时,foreach出现错误。感谢您的帮助。 - Mahmoud
@Mahmoud,你提供的对象字符串中没有$categories->data。你遇到了什么错误? - Gordon
这是一个print_r(json_decode($categories))的链接:http://pastie.org/844979。我问题中提到的那个错误出现在我使用$categories = $categories->data;之后,在foreach ($arr->categories as $category) {中。 - Mahmoud
@Mahmoud,我不确定你在做什么,但是使用 $categories = json_decode($data); $categories = $categories->data; 导出的 $categories 执行 json_decode($categories) 是否有效?显然,你的 data 变量中包含一个 JSON 字符串对象。 - Gordon
抱歉,我的错误。我已经更新了我的问题,您可以在那里看到并理解我所做的事情。这是完整的代码:http://pastie.org/845028,您可以在那里看到并教我我做错了什么。再次感谢您帮助我,我很感激。 - Mahmoud
1
就像我之前说的那样,data 包含一个 JSON 字符串,你需要解码它并转换成对象。请参考 pasty。 - Gordon

1

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

$categories = json_decode($data, true);


0

@Gordon 看起来是正确的 - 那看起来像 JSON。不过,假设你正在处理一个 "实际" 的 PHP 对象,则它将可迭代; 只需用 foreach 逐个遍历并将每个键/值对推入您的目标数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接