【问题标题】:Iterate over JSON with PHP使用 PHP 迭代 JSON
【发布时间】:2017-03-29 03:41:29
【问题描述】:

我不知道如何从下面的 JSON 中获取以下键/值:

我需要在for循环中打印出来:

“项目”即“test-project-1”

“数据集”即“数据集1”

“权限”,即“角色:WRITER,组:test1@test.com”

{
   "projects":{
      "test-project-1":{
         "datasets":{
            "dataset1":{
               "permissions":{
                  "role":"WRITER",
                  "group":"test1@test.com"
               }
            },
            "dataset2":{
               "permissions":{
                  "role":"READER",
                  "group":"test2@test.com"
               }
            },
            "dataset3":{
               "permissions":{
                  "role":"READER",
                  "group":"test3@test.com"
               }
            },
            "dataset4":{
               "permissions":{
                  "role":"READER",
                  "group":"test4@test.com"
               }
            },
            "dataset5":{
               "permissions":{
                  "role":"READER",
                  "group":"test5@test.com"
               }
            }
         }
      },
      "test-project-2":{
         "datasets":{
            "dataset1":{
               "permissions":{
                  "role":"WRITER",
                  "group":"test1@test.com"
               }
            },
            "dataset2":{
               "permissions":{
                  "role":"READER",
                  "group":"test2@test.com"
               }
            },
            "dataset3":{
               "permissions":{
                  "role":"READER",
                  "group":"test3@test.com"
               }
            },
            "dataset4":{
               "permissions":{
                  "role":"READER",
                  "group":"test4@test.com"
               }
            },
            "dataset5":{
               "permissions":{
                  "role":"READER",
                  "group":"test5@test.com"
               }
            }
         }
      }
   }
}

我试过了,但唯一打印出来的是“数组”。

这样的事情不起作用:

$new_json = {path_to_json};
$new_projects = $new_json['projects'];
foreach ($new_projects as $project) {
    echo $project . "<br>";
    foreach ($new_projects['datasets'] as $datasets){
        echo $datasets . "<br>";
    }
}

【问题讨论】:

标签: php arrays json dictionary


【解决方案1】:

PHP code demo

$json='{
   "projects":{
      "test-project-1":{
         "datasets":{
            "dataset1":{
               "permissions":{
                  "role":"WRITER",
                  "group":"test1@test.com"
               }
            },
            "dataset2":{
               "permissions":{
                  "role":"READER",
                  "group":"test2@test.com"
               }
            },
            "dataset3":{
               "permissions":{
                  "role":"READER",
                  "group":"test3@test.com"
               }
            },
            "dataset4":{
               "permissions":{
                  "role":"READER",
                  "group":"test4@test.com"
               }
            },
            "dataset5":{
               "permissions":{
                  "role":"READER",
                  "group":"test5@test.com"
               }
            }
         }
      },
      "test-project-2":{
         "datasets":{
            "dataset1":{
               "permissions":{
                  "role":"WRITER",
                  "group":"test1@test.com"
               }
            },
            "dataset2":{
               "permissions":{
                  "role":"READER",
                  "group":"test2@test.com"
               }
            },
            "dataset3":{
               "permissions":{
                  "role":"READER",
                  "group":"test3@test.com"
               }
            },
            "dataset4":{
               "permissions":{
                  "role":"READER",
                  "group":"test4@test.com"
               }
            },
            "dataset5":{
               "permissions":{
                  "role":"READER",
                  "group":"test5@test.com"
               }
            }
         }
      }
   }
}';
$array=  json_decode($json,true);
foreach($array["projects"] as $projectName => $projects)
{
    echo "Project name ".$projectName."<br/>";
    foreach($projects["datasets"] as $databaseNames => $databaseData)
    {
        echo "  Database name ".$databaseNames."<br/>";
        echo "  Database role ".$databaseData["permissions"]["role"]."<br/>";
        echo "  Database group ".$databaseData["permissions"]["group"]."<br/>";
    }
}

【讨论】:

  • 这很好用!如何访问嵌套的“权限”中的“角色”和“组”数据?
  • 只需在我正在打印数据库名称的嵌套 for 循环中使用您想要的 $databaseData["permissions"]["role"]$databaseData["permissions"]["group"]
  • 您能否更新代码演示以反映这一点?我在我这边试过了,但没有用。之后我会接受你的回答。谢谢。
【解决方案2】:

格式为foreach(“数组”为“数组中的键”)

foreach ($new_json as $new_projects) {
    echo $new_projects . "<br>";
    $datasets=$new_projects['datasets'];
    foreach ($new_projects as $datasets){
        echo $datasets . "<br>";
    }
}

【讨论】:

    【解决方案3】:

    你需要使用json_decode函数PHP Manual

    $jsonArray = json_decode($jsonData, true);
    foreach($jsonArray as $project){
        echo $project . '<br>';
        foreach($project['datasets'] as $dataset)
        {
            echo $dataset . '<br>';
            foreach($dataset['permissions'] as $permissions)
            {
                echo sprintf('Role: %s, group: %s<br>', $permissions['role'], $permissions['group'];
            }
        }
    }
    

    如果您不想将 json 转换为数组,则需要将 false 作为第二个参数传递,而 stdClass 将被返回。

    【讨论】:

      猜你喜欢
      • 2018-01-27
      • 2012-06-30
      • 2020-06-28
      • 2012-09-29
      • 1970-01-01
      • 2016-05-23
      • 2015-06-04
      • 2019-01-23
      • 2017-09-21
      相关资源
      最近更新 更多