【问题标题】:How to add square braces around subarray data inside of a json encoded string?如何在 json 编码字符串内的子数组数据周围添加方括号?
【发布时间】:2013-03-11 16:24:16
【问题描述】:

当尝试访问 API 时,必须像这样解析 JSON 数组

{"item":[{"id":"123456", "name":"adam"}]}

但是当我在做下面的代码时

$data = array("item" => array("id" => "123456", "name" => "adam"));
echo json_encode($data);

它返回没有方括号的json数组,如下所示

{"item":{"id":"123456","name":"adam"}}

我已经花了好几个小时试图弄清楚如何解决这个问题,只是想不出解决方案

【问题讨论】:

    标签: php json


    【解决方案1】:

    你需要把东西包装在另一个array

    $data = array("item" => array(array("id" => "123456", "name" => "adam")));
    

    如果我们使用等效的 PHP 5.4 数组语法,这将更容易理解:

    $data = [ "item" => [ ["id" => "123456", "name" => "adam"] ] ];
    

    将此与 JSON 进行比较:

            { "item":   [ {"id":"123456", "name":"adam"      } ] }
    

    唯一需要解释的是为什么其中一个 PHP 数组在 JSON 中仍然是数组 [],而另外两个则转换为对象 {}。但是documentation 已经这样做了:

    编码数组时,如果键不是连续数字 从 0 开始的序列,所有的键都被编码为字符串,并且 为每个键值对明确指定。

    【讨论】:

    • 当使用提供的代码时,它会将方括号放在所有内容之外而不是 item 内?
    • @CurtisCrewe:对不起,错字。现已修复。
    【解决方案2】:

    在阅读这篇文章之前,我有这个:

    echo json_encode($data);

    看完这篇文章:

    echo json_encode(array($data));
    

    括号出现在 JSON 对象的开头和结尾。

    【讨论】:

    • 有用,但如果你想要数据数组中的括号,只需使用如下内容:$MyArray = array( "something" => [array("foo" => "bar")] );
    【解决方案3】:

    这种方式使用起来很方便,可以在数组上添加更多的项

    $val = array();
    $val["id"]="123456";
    $val["name"]="adam";
    
    $data = array();
    $data["item"][]=$val;
    
    echo json_encode($data);
    

    它会在下面输出:

    {"item":[{"id":"123456", "name":"adam"}]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      相关资源
      最近更新 更多