php - 在 PHP 中从 Json 中提取关键元素
问题描述
我需要在 PHP 中使用 Json 文件,这样我就可以在其主要元素的特定键中进行迭代。
我有这个示例 Json 数据:
[{"A": [
{
"name": "object 1",
"code": "x001",
"date": "2018-01-01T23:00:00-0600"
},
{
"name": "object 2",
"code": "x002",
"date": "2018-01-01T23:00:00-0600"
},
{
"name": "object 3",
"code": "x003",
"date": "2018-01-01T23:00:00-0600"
}
]},{"B": [
{
"name": "object 1",
"code": "y001"
"date": "2018-01-01T23:00:00-0600"
},
{
"name": "object 2",
"code": "y002",
"date": "2018-01-01T23:00:00-0600"
}
]}]
据我所知,我可以像这样处理一个 Json 文件(在主键 A 和 B 中没有嵌套元素):
<?php
$url = './data.json';
$data = file_get_contents($url);
echo "<!--- File contents -->\n";
var_dump($data);
$contents = json_decode($data, true);
echo "<!--- Associative Array -->\n";
var_dump($contents);
echo "<!--- BEGIN -->";
foreach ($contents as $element) {
echo "Name: " . $element['name'] . "\n";
echo "Code: " . $element['code'] . "\n";
echo "Date: " . $element['date'] . "\n";
echo "- - - - - -\n";
}
echo "<!--- END -->";
?>
我想要做的是在给定键内调用一个循环,例如,一个循环对应于B的所有元素:
{
"name": "object 1",
"code": "y001"
"date": "2018-01-01T23:00:00-0600"
},
{
"name": "object 2",
"code": "y002",
"date": "2018-01-01T23:00:00-0600"
}
它可能会将这些元素提取到第二个关联数组或其他建议的方法......
并且预期的结果需要是:
Name: object 1
Code: y001
Date: 2018-01-01T23:00:00-0600
- - - - - -
Name: object 2
Code: y002
Date: 2018-01-01T23:00:00-0600
- - - - - -
忽略A元素
解决方案
此脚本可能会帮助您设计和输出所需的字符串。它适用于$element["B"]
. 您可以简单地为数组的其他元素编写类似foreach
的内容,例如$element["A"]
.
$url = './data.json';
$data = file_get_contents($url);
$output = "<!--- File contents -->\n";
$contents = json_decode($data, true);
$output .= "<!--- Associative Array -->\n";
$output .= "<!--- BEGIN -->\n";
foreach ($contents as $elements) {
if (!$elements["B"]) {continue;} // You might remove this and add other elements of your inputs such as $elements["A"]
foreach ($elements["B"] as $key => $element) {
$output .= "Name: " . $element['name'] . "\n";
$output .= "Code: " . $element['code'] . "\n";
$output .= "Date: " . $element['date'] . "\n";
$output .= "- - - - - -\n";
}
}
$output .= "<!--- END -->\n";
echo $output;
您可能不需要逐行回显,您可以将其存储在变量中,例如$output
, 并在末尾echo $output;
。
输出:
<!--- File contents -->
<!--- Associative Array -->
<!--- BEGIN -->
Name: object 1
Code: y001
Date: 2018-01-01T23:00:00-0600
- - - - - -
Name: object 2
Code: y002
Date: 2018-01-01T23:00:00-0600
- - - - - -
<!--- END -->
推荐阅读
- python - 用于语义相似性的 BERT 嵌入
- mysql - JOIN 与 3 个表和列组合的 MAX 值
- sql-server - 为什么不从数据库小时和分钟显示不完全相同?
- python - 如何在python中用特殊字符替换句子?
- reactjs - 使用来自高阶组件的 propTypes 描述道具
- google-sheets-api - Google表格V4电子表格.batchUpdate:无效请求追加维度:没有ID的网格:0
- python - 如何将图像上传和编辑到帖子?- 姜戈
- java - 本地主机上的谷歌云应用引擎和 Spring Boot 错误使用应用引擎部署
- javascript - 使用 Promise.All 运行多个 Promise 时出现错误
- use-effect - ReasonML 中的 useEffect 与 useEffect0