显示JSON数据的最佳方式

时间:2014-10-29 17:45:54

标签: javascript php jquery json dynamic

我有JSON数据:

{
  "apiVersion": "0.1",
  "data": {
    "roomCount": 12,
    "rooms": [
      {
        "roomNumber": "204",
        "occupied": false,
        "permissions": {
          "roomCharges": true,
          "adultContent": true
        }
      },
      {
        "roomNumber": "205",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "206",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "207",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "208",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "209",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }

我可以格式化它。使用JSON_Decode,然后在我的$output中显示<table>,如下所示:

<table>
    <?php foreach($output['data']['rooms'] as $info): ?>
        <tr>
            <td><?php echo $info['roomNumber'] ?></td>
            <td><?php echo ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; ?></td>
            <td><?php echo ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td>
            <td><?php echo ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td> 
            <td><?php echo '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>'?></td>
        </tr>
    <?php endforeach; ?>
</table>

但我的问题是,由于我有多个使用同一个表的php页面,我想创建一个动态的方法来设置变量,然后在多个位置调出这些变量。我的目标是在一个位置编辑JSON参数并更新所有php页面,而不是在几个php页面上更新每个key=>value。 (像这样将每一个设置为一个变量)。

<?php foreach($output['data']['rooms'] as $info){
    $roomNumber = $info['roomNumber'];
    $occupied = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
    $roomCharges = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
    $adultContent = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
    $roomReport = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';
}
?>

在我的桌子上显示:

        <tr>
            <td><?php echo $roomNumber ?></td>
            <td><?php echo $occupied ?></td>
            <td><?php echo $roomCharges ?></td>
            <td><?php echo $adultContent ?></td> 
            <td><?php echo $roomReport ?></td>
        </tr>

让它变得更有活力。因此,如果JSON键和值发生变化,我可以在一个位置更改它们,即['permissions']['adultContent']可能会变为['guestValue']['RoomAuthorized']。我可以在一个位置进行更改,其余页面会自动更新。

我遇到的问题是,当我将variables插入<td>进行半工作时,就像这样:

<tr>
  <td><?php echo $roomNumber ?></td>
  <td><?php echo $occupied ?></td>
  <td><?php echo $roomCharges ?></td>
  <td><?php echo $adultContent ?></td> 
  <td><?php echo $roomReport ?></td>
 </tr>

我为每个订单项获得相同的密钥和值。例如:

204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here

当我使用的原始table时,正确地恢复数据,如下所示:

table>
        <?php foreach($output['data']['rooms'] as $info): ?>
            <tr>
                <td><?php echo $info['roomNumber'] ?></td>
                <td><?php echo ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; ?></td>
                <td><?php echo ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td>
                <td><?php echo ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td> 
                <td><?php echo '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>'?></td>
            </tr>
        <?php endforeach; ?>
    </table>

带回来:

204 VACANT      ENABLED     ENABLED     Click Here
205 OCCUPIED    DISABLED    DISABLED    Click Here
206 OCCUPIED    DISABLED    DISABLED    Click Here
207 OCCUPIED    DISABLED    DISABLED    Click Here
208 OCCUPIED    DISABLED    DISABLED    Click Here

你对我如何让它变得更有活力有任何想法吗?感谢您查看我的问题。如果您还需要其他任何帮助,请告诉我。我试着清楚地解释一下,如果你还需要什么,请告诉我。

2 个答案:

答案 0 :(得分:1)

据我所知,问题是你想在几个地方重用变量,但如果JSON发生了变化,你只需要在一个中心位置进行编辑。

要实现此目的,您可以使用映射将一个位置的变量映射到您选择的局部变量。在第5行中,在第一个代码中,您可以更改为本地数组选择所需的任何名称。如果JSON中的变量发生更改,只需更改该变量,您的本地映射仍然相同。现在您只需要更改函数get_data_in_my_format()中的代码。

创建一个data_parser.php或类似的东西

<?php
    function get_data_in_my_format(){
        $input = json_decode('your data here', true);
        $output = array();
        foreach($input['data']['rooms'] as $info){
            $temp['roomNumber'] = $info['roomNumber'];
            $temp['occupied'] = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
            $temp['roomCharges'] = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
            $temp['adultContent'] = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
            $temp['roomReport'] = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';
            $output[] = $temp;
        }
        return $output;
    }

    //Only insert following line if you want to run the function no matter what
    $data_in_my_format = get_data_in_my_format();

在您要使用此代码的文件中

<?php
    include('data_parser.php');
    //If you did not initiate $data_in_my_format in data_parser.php, do it here
    //$data_in_my_format = get_data_in_my_format();
    foreach($data_in_my_format as $room){
        ?>
            <tr>
                <td><?php echo $room['roomNumber'] ?></td>
                <td><?php echo $room['occupied'] ?></td>
                <td><?php echo $room['roomCharges'] ?></td>
                <td><?php echo $room['adultContent'] ?></td> 
                <td><?php echo $room['roomReport'] ?></td>
            </tr>
        <?php
    }

这是你想要的吗?

编辑:在开头

中更改了说明

答案 1 :(得分:-1)

虽然你的代码中没有显示它,但似乎你在第一个循环之外第二次循环遍历这些项目,因此设置变量,重复初始设置值而不实际&#34;更新&#34 ;变量以对应于该行中的值。

包含变量声明和表输出的简单循环应该可以解决这个问题:

<?php 
    foreach($output['data']['rooms'] as $info){
        $roomNumber = $info['roomNumber'];
        $occupied = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
        $roomCharges = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
        $adultContent = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
        $roomReport = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';

        ?>

        <tr>
           <td><?php echo $roomNumber ?></td>
           <td><?php echo $occupied ?></td>
           <td><?php echo $roomCharges ?></td>
           <td><?php echo $adultContent ?></td> 
           <td><?php echo $roomReport ?></td>
        </tr>
        <?php
    }
?>