PHP将JSON值解析为Html表

时间:2016-02-11 21:11:02

标签: php html mysql json

我工作的公司决定将所有数据库查询保存在RESTful API文件中。是一个很大的学习曲线,但最后我有JSON对象返回数据。我现在的问题是如何将值填充到HTML表格中。

下面我将向您展示我现在拥有的内容,我已经尝试过的内容以及示例代码,以便您可以建议我需要纠正的位置。

非常感谢。

1。首先,我请求数据:

$schoolid = $_GET['schoolid'];
$data = file_get_contents("http://www.mydomainname.com/api/webapi.php?Oper=liststudents&schoolid=" . $schoolid);
echo $data;

2。以下是结果示例。显然是一个Json字符串:

{"data":[{
    "ID":"0450",
    "FirstName":"\u05d9\u05d5\u05e1\u05e3\u05de\u05e0\u05d7\u05dd",
    "LastName":"\u05d1\u05d9\u05e0\u05e0\u05e2\u05e8",
    "SchoolID":"17",
    "UID":"0001","
    TeacherID":"26"},{"ID":"0017",
    "FirstName":"\u05d0\u05e8\u05e8\u05d9\u05d9\u05e0\u05d3",
    "LastName":"\u05d6\u05d0\u05d1",
    "SchoolID":"17","UID":"0017",
    "TeacherID":"24"},{"ID":"0018",
    "FirstName":"\u05d3\u05d5\u05d1 \u05d2\u05dc\u05d5\u05d9\u05d1,
    "LastName":"\u05d9\u05e9\u05db\u05e8",
    "SchoolID":"17",
    "UID":"0018",
    "TeacherID":"24"}

我猜它仍然是一个必须被解析的对象......现在,

3。以下是我想要实现的目标。

|ID|  FirstNm  |  LastNm | School |UID| Teacher|      
|---|------------|-----------|-----------|-----|------------|     
|---|------------|-----------|-----------|-----|------------|

等等,等等......

4. 以下是我到目前为止尝试的一些方法,但我要么得到" 0"结果,或者它会抛出错误

一个。

foreach($data->{'data'} as $obj){
    echo '<tr>
    <td>' . $obj->{'ID'} .'</td>
    <td>' . $obj->{'FirstName'} .'</td>
    <td>' . $obj->{'LastName'} .'</td>
    <td>' . $obj->{'SchoolID'} .'</td>
    <td>' . $obj->{'UID'} .'</td>
    <td>' . $obj->{'TeacherID'} .'</td>
</tr>'

B中。

foreach ($data as $key => $jsons) {
    $table ='<table class="'.$jsons['class'].'" border="1">';
    foreach ($jsons as $rkey => $rvalue) {
        if($rkey=='head')
        {
            $table.='<tr>';
            foreach($rvalue as $rvv)
            {
                $table.='<th>'.$rvv.'</th>';
            }
            $table.='</tr>';
        }else
        if($rkey=='rows')
        {
            foreach($rvalue as $rvv)
            {
                $table.='<tr>';
                foreach($rvv as $rv)
                {
                    $table.='<td>'.$rv.'</td>';
                }
                $table.='</tr>';
            }
        }
    }
}
echo $table;

尝试了更多的东西,但我只需要一个工作模型......

2 个答案:

答案 0 :(得分:1)

这就是我要做的事情:

  1. 修复您的JSON。我认为你发错了

      ["address"]=>
      array(1) {
        [1]=>
        array(7) {
          ["txt"]=>
          string(8) "123 Test"
          ["city"]=>
          string(4) "City"
          ["state"]=>
          string(6) "CANADA"
          ["county"]=>
          string(6) "County"
          ["zip"]=>
          string(5) "12345"
          ["from"]=>
          string(10) "02/01/2016"
          ["till"]=>
          string(10) "02/02/2016"
        }
      }
    
  2. 将其转换为$json = '{"data":[{"ID":"0450","FirstName":"\u05d9\u05d5\u05e1\u05e3\u05de\u05e0\u05d7\u05dd","LastName":"\u05d1\u05d9\u05e0\u05e0\u05e2\u05e8","SchoolID":"17","UID":"0001","TeacherID":"26"},{"ID":"0017","FirstName":"\u05d0\u05e8\u05e8\u05d9\u05d9\u05e0\u05d3","LastName":"\u05d6\u05d0\u05d1","SchoolID":"17","UID":"0017","TeacherID":"24"},{"ID":"0018","FirstName":"\u05d3\u05d5\u05d1 \u05d2\u05dc\u05d5\u05d9\u05d1","LastName":"\u05d9\u05e9\u05db\u05e8","SchoolID":"17","UID":"0018","TeacherID":"24"}]}';

    的PHP对象
    json_decode
  3. 使用$obj = json_decode($json); 进行调试,这将为您提供以下内容:

    var_dump($obj)
  4. 最后,既然您已经看到了正在使用的内容,就可以使用object(stdClass)[1] public 'data' => array (size=3) 0 => object(stdClass)[2] public 'ID' => string '0450' (length=4) public 'FirstName' => string '×™×•×¡×£×ž× ×—×' (length=16) public 'LastName' => string '×‘×™× × ×¢×¨' (length=12) public 'SchoolID' => string '17' (length=2) public 'UID' => string '0001' (length=4) public 'TeacherID' => string '26' (length=2) 1 => object(stdClass)[3] public 'ID' => string '0017' (length=4) public 'FirstName' => string '××¨×¨×™×™× ×“' (length=14) public 'LastName' => string '×–×ב' (length=6) public 'SchoolID' => string '17' (length=2) public 'UID' => string '0017' (length=4) public 'TeacherID' => string '24' (length=2) 2 => object(stdClass)[4] public 'ID' => string '0018' (length=4) public 'FirstName' => string 'דוב גלויב' (length=17) public 'LastName' => string 'ישכר' (length=8) public 'SchoolID' => string '17' (length=2) public 'UID' => string '0018' (length=4) public 'TeacherID' => string '24' (length=2) 对象运算符访问数据:

    ->

答案 1 :(得分:-2)

这样的事情应该有效。

   <?php

   // Json_decode the file contents
   $file_data = json_decode(trim($file_text));
   // var_dump this $file_data and let us know what you get

   // Select the array potion 'data'
   $data = $file_data->data;
   // var_dump this $data and let us know what you get

    foreach ($data as $obj) {
       ...display code...
    }

    ?>

在$ file_data和$ data中输入一些var_dump()语句,看看你是否真的得到了你期望的数据。数据的存储方式可能存在一些编码/格式化问题。你知道处理和存储这些数据的内容吗?

关于编码,我做了一点研究。如果我没弄错的话,你需要将Unicode实体转换为Unicode文本进行显示。 iconv非常适合转换,但我不确定原始编码是什么。是日本人的写作吗?

$text = "\u05d0\u05e8\u05e8\u05d9\u05d9\u05e0\u05d3";

echo iconv('UCS-2BE', 'UTF-8', $text);

产生

屵〵搰屵〵攸屵〵攸屵〵搹屵〵搹屵〵攰屵〵搳

或者......从How to decode Unicode escape sequences like "\u00ed" to proper UTF-8 encoded characters?

尝试此操作
$str = "\u05d0\u05e8\u05e8\u05d9\u05d9\u05e0\u05d3";

$str = preg_replace_callback('/\\\\u([0-9a-fA-F]{4})/', function ($match) {
    return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
}, $str);
echo $str."\n\n";

制作看起来像希伯来字符的内容:

ארריינד

如果这是正确的,请在显示之前为自己编写一个解码数据的功能。