You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP处理嵌套JSON:读取文件JSON、解析并转换为HTML?

嘿,这个问题我太熟了!咱们一步步拆解,从读取JSON文件到解析嵌套结构,再转换成美观的HTML,结合你给的具体JSON数据,给你整得明明白白:

步骤1:读取并解析JSON文件

首先得把存储在文件里的JSON内容读进来,PHP里用file_get_contents()就很方便,然后用json_decode()把JSON字符串转成PHP能处理的关联数组(第二个参数设为true)。别忘了加个错误检查,避免文件读取失败或者JSON格式出错的情况:

// 读取JSON文件内容
$jsonContent = file_get_contents('your-file.json');
if (!$jsonContent) {
    die('哎呀,无法读取JSON文件,请检查文件路径是否正确!');
}

// 解析为关联数组,方便后续操作
$data = json_decode($jsonContent, true);
// 检查解析是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析出错啦:' . json_last_error_msg());
}
步骤2:提取目标嵌套数据

看你给的JSON结构,核心的房产数据藏在RETS > RED > REP > ResiProp这个嵌套路径里,而且ResiProp是一个数组,每个元素里的all字段才是具体的房产信息。咱们先把这部分数据提取出来,顺便做个空值判断,防止没有数据的时候报错:

// 提取ResiProp数组,用??运算符做容错处理
$resiProps = $data['RETS']['RED']['REP']['ResiProp'] ?? [];

if (empty($resiProps)) {
    echo '<p>暂时没有找到房产数据哦~</p>';
    exit;
}
步骤3:把嵌套数据转成HTML

接下来就是把提取到的房产数据转换成用户能看懂的HTML了。这里我用卡片式布局举例子(你也可以改成表格或者列表,按需调整),重点是遍历ResiProp数组,把每个字段渲染出来,还要注意安全转义(用htmlspecialchars()防止XSS攻击):

比如你给的Remarks字段是用分号分隔的字符串,咱们可以把它转成子列表,看起来更清晰:

// 开始生成HTML内容
echo '<div class="property-list">';

foreach ($resiProps as $prop) {
    $property = $prop['all'];
    // 处理备注字段,拆分成分号分隔的列表项
    $remarks = !empty($property['Remarks']) ? explode(';', $property['Remarks']) : [];
    $remarks = array_map('trim', $remarks); // 去掉每个项前后的空格

    echo '<div class="property-card">';
    echo '<h3>' . htmlspecialchars($property['Address']) . '</h3>';
    echo '<ul>';
    echo '<li><strong>更新时间:</strong>' . htmlspecialchars($property['IdxUpdtedDt']) . '</li>';
    echo '<li><strong>空调配置:</strong>' . htmlspecialchars($property['H']) . '</li>';
    echo '<li><strong>备注:</strong>';
    if (!empty($remarks)) {
        echo '<ul>';
        foreach ($remarks as $note) {
            if (!empty($note)) { // 跳过空的备注项
                echo '<li>' . htmlspecialchars($note) . '</li>';
            }
        }
        echo '</ul>';
    } else {
        echo '无';
    }
    echo '</li>';
    echo '</ul>';
    echo '</div>';
}

echo '</div>';
几个关键注意点
  • 安全第一:所有输出到HTML的内容都要用htmlspecialchars()转义,避免恶意脚本注入(XSS攻击),尤其是像地址、备注这类可能包含特殊字符的字段。
  • 容错处理:用??运算符或者isset()检查每个嵌套字段是否存在,万一JSON结构有变化,也不会直接报错。
  • 样式自定义:我给的卡片样式只是参考,你可以根据自己的需求修改CSS,改成表格、网格或者其他布局都没问题。
完整的可运行代码

把上面的步骤整合起来,加上基础的HTML结构和CSS样式,直接就能运行:

<?php
// 读取JSON文件
$jsonContent = file_get_contents('your-file.json');
if (!$jsonContent) {
    die('无法读取JSON文件,请检查文件路径');
}

// 解析JSON为关联数组
$data = json_decode($jsonContent, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解析错误:' . json_last_error_msg());
}

// 提取目标数据
$resiProps = $data['RETS']['RED']['REP']['ResiProp'] ?? [];
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>房产信息列表</title>
    <style>
        .property-list {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
            gap: 20px;
            padding: 20px;
            max-width: 1200px;
            margin: 0 auto;
        }
        .property-card {
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            padding: 18px;
            box-shadow: 0 2px 6px rgba(0,0,0,0.05);
            background-color: #fff;
        }
        .property-card h3 {
            margin-top: 0;
            color: #2d3748;
            font-size: 1.2rem;
        }
        ul {
            list-style: none;
            padding-left: 0;
            margin-top: 10px;
        }
        li {
            margin-bottom: 8px;
            color: #4a5568;
        }
        li strong {
            color: #2d3748;
        }
        .property-card ul ul {
            margin-top: 5px;
            padding-left: 15px;
            list-style-type: disc;
        }
    </style>
</head>
<body>
    <h1 style="text-align: center; color: #2d3748; margin-top: 30px;">房产信息列表</h1>
    <?php if (empty($resiProps)): ?>
        <p style="text-align: center; color: #718096;">暂无房产数据</p>
    <?php else: ?>
        <div class="property-list">
            <?php foreach ($resiProps as $prop): ?>
                <?php $property = $prop['all']; ?>
                <div class="property-card">
                    <h3><?= htmlspecialchars($property['Address']) ?></h3>
                    <ul>
                        <li><strong>更新时间:</strong><?= htmlspecialchars($property['IdxUpdtedDt']) ?></li>
                        <li><strong>空调配置:</strong><?= htmlspecialchars($property['H']) ?></li>
                        <li><strong>备注:</strong>
                            <?php 
                            $remarks = !empty($property['Remarks']) ? array_map('trim', explode(';', $property['Remarks'])) : [];
                            if (!empty($remarks)):
                            ?>
                                <ul>
                                    <?php foreach ($remarks as $note): ?>
                                        <?php if (!empty($note)): ?>
                                            <li><?= htmlspecialchars($note) ?></li>
                                        <?php endif; ?>
                                    <?php endforeach; ?>
                                </ul>
                            <?php else: ?>
                                无
                            <?php endif; ?>
                        </li>
                    </ul>
                </div>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>
</body>
</html>

内容的提问来源于stack exchange,提问作者rsethi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:16:44