【问题标题】:JSON with nested arrays without square brackets in PHPJSON在PHP中带有没有方括号的嵌套数组
【发布时间】:2019-11-16 14:44:33
【问题描述】:

StackOverflow 上有很多问题与我的问题相近,但没有一个能完全回答。

为了在 Android 应用中测试 POST 请求,我找到了一个使用以下测试 API 的示例:

https://reqres.in/api/users/2

此 API 返回

{"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar":"some url"}}

(注意:我将图片的 url 更改为“some url”,以防与 StackOverflow 上的规则发生冲突)。

我的问题是: 如何让 PHP 给我完全相同的输出?

通常,我使用这样的东西:

$result=array();
$result[]['id']=2/1; //0
$result[]['email']="janet.weaver@reqres.in"; //1
$result[]['first_name']="Janet"; //2
$result[]['last_name']="Weaver"; //3
$result[]['avatar']="some url"; //4
$data["result"]=$result;
echo json_encode($data);

但这会在输出中添加一些方括号。那么:如何在自己的 PHP 脚本中模仿 URL 的输出?

希望从更有经验的人那里得到一些意见!

阿尔伯特

【问题讨论】:

  • 将上面的 JSON 字符串复制粘贴到一个变量中,执行 json_decode。好了,你会看到要构建的数组结构。
  • 试过了。 $str='{"data":{"id":2,"email":"janet.weaver@reqres.in","first_name":"Janet","last_name":"Weaver","avatar": “一些网址”}}';回声 json_decode($str);什么都没有显示。
  • 你不能回显数组,更像是需要var_dump()

标签: php json brackets


【解决方案1】:

您正在使用$result[]['id']=2/1; 构建一个嵌套数组。每次调用都会向$result 列表数组中添加一个具有单个元素的新关联数组。

PHP 将两件事编码为 JSON 对象 - 关联数组和对象。使用数组更短,但使用对象有助于更好地理解它。所以首先以stdClass 为例:

$json = new stdClass();
$json->data = $data = new stdClass();
$data->id = 2;
$data->email = "janet.weaver@reqres.in";
$data->first_name = "Janet";
$data->last_name = "Weaver";
$data->avatar= "some url";

echo json_encode($json, JSON_PRETTY_PRINT);

对象是 PHP 中的引用。所以你的一个改变会影响到所有变量的引用。数组不是这种情况。但它可以在一个表达式中完成:

$json = [
    'data' => [
        'id' => 2/1,
        'email' => "janet.weaver@reqres.in",
        'first_name' => "Janet",
        'last_name' => "Weaver", 
        'avatar' => "some url"
    ]
];

echo json_encode($json, JSON_PRETTY_PRINT);

【讨论】:

  • 非常感谢您,ThW!这就是我需要的答案!
【解决方案2】:

希望这个示例对您有所帮助,下面的示例包含您所期望的所有组合。

<?php
     $name = "Your Name";
        $yearsofexp = "Years";
        $designation = "Your designnation";


        $pro_summary->name = $name;
        $pro_summary->yearsofexp = $yearsofexp;
        $pro_summary->designation = $designation;

        $topics->tech1 = "Android";
        $topics->tech2 = "Java";
        $topics->tech3 ="PHP";

        $past_exp[]=array("comp"=> "company One", "role"=> "techlead","dates"=>"2015-2019", "main_resp"=>"coding,testing,debugging","logo"=>"some.png");
        $past_exp[]=array("comp"=> "company 2", "role"=> "senior software engineer","dates"=>"2014-2015", "main_resp"=>"coding,testing,debugging","logo"=>"some2.png");
        $past_exp[]=array("comp"=> "company 3", "role"=> "senior software developer","dates"=>"2013-2014", "main_resp"=>"coding,testing,debugging","logo"=>"some3.png");
        $past_exp[]=array("comp"=> "company 4", "role"=> "software developer","dates"=>"2010-2013", "main_resp"=>"coding,testing,debugging","logo"=>"some4.png");

        //$past_exp[] = array("px1" =>$past_exp[1],"px2" =>$past_exp[2],"px3" =>$past_exp[3],"px4" => $past_exp[4] );

        $uni[] = array("education"=>"Degree 1", "university"=>"University 1", "logo" =>"uni1.png");
        $uni[] = array("education"=>"Degree 2", "university"=>"University 2", "logo"=>"uni2.png");



        $my_cv->Professional = $pro_summary;
        $my_cv->Technology = $topics;
        $my_cv->PastExperience = $past_exp;
        $my_cv->Education = $uni;




        echo json_encode($my_cv);
?>

【讨论】:

  • 谢谢,杰克。我还没有尝试过这是否有效,但 ThW 的答案有效。
  • 很高兴知道,当你有合适的要求时尝试这个方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
相关资源
最近更新 更多