[英]Create a json viewer for nested n level in PHP
我想为将json转换为表格列表的api创建一个json查看器,有人可以指点我怎么做吗? 我知道它的可能,但我不知道该怎么做。
例如
{"name":diana,
"age":12,
"gender":"male"}
to:
<table>
<tr>
<td>name:</td><td>diana</td>
</tr>
<tr>
<td>age:</td><td>12</td>
</tr>
<tr>
<td>gender:</td><td>male</td>
</tr>
</table>
如果不清楚,请让我知道:)我忘了提到我将为嵌套json工作。 m(_ _)m
使用json_decode
解析json,然后遍历结果...
echo "<table>\n";
$data = json_decode($json, true);
foreach($data as $key=>$value) echo "<tr><td>{$key}:</td><td>{$value}</td></tr>\n";
echo "</table>\n";
请注意,这仅适用于您在示例中给出的“简单” json对象...如果存在多层嵌套,那么这还不够。 您将必须检查$value
的类型,并决定如何在任何嵌套级别打印它。
还要注意,json字符串也可以根本不是对象。 它也可以是原始类型。
最终,您将拥有一个多维数组或一个对象(如果您从json_decode
调用中省略了第二个参数)。 从那时起,“目标”从json对象的 漂亮打印变为php变量的漂亮打印 。 有很多解决方案。
试试这个代码
$arr = json_decode($jsonstring);
<table>
<?php foreach($arr as $key=>$val){ ?>
<tr>
<td><?php echo $key?>:</td><td><?php echo $val;?></td>
</tr>
<?php }?>
<table>
这是非常简单的方法。
$str = '{"name":"diana",
"age":12,
"gender":"male"}';
$str = json_decode($str, TRUE);
echo '
<table>
<tr>
<td>name:</td><td>'.$str['name'].'</td>
</tr>
<tr>
<td>age:</td><td>'.$str['age'].'</td>
</tr>
<tr>
<td>gender:</td><td>'.$str['gender'].'</td>
</tr>
<table>';
Json_decode将您的JSON数组转换为php数组,并将第二个参数设置为TRUE。 数组。
看看这个 。 希望对您有所帮助。
试试这个...
$str = '{ "name": "diana",
"age": 12,
"gender": "male"}';
$dstr = json_decode($str);
echo '
<table>
<tr>
<td>name:</td><td>'.$dstr->name.'</td>
</tr>
<tr>
<td>age:</td><td>'.$dstr->age.'</td>
</tr>
<tr>
<td>gender:</td><td>'.$dstr->gender.'</td>
</tr>
<table>';
这是我的完整代码(有效)-和@poncha的荣誉
<style type="text/css">
table{border-collapse: collapse;}
td{border:1px solid #aaa;}
.array{border-right:0px;}
</style>
<?php
$json_raw = '{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}';
function JSON_to_HTML($json){
echo "<table>";
foreach($json as $key=>$value){
if($value):
if(is_array($value)):
echo "<tr><td class='array'>{$key}:</td><td>";
JSON_to_HTML($value);
echo "</td></tr>";
else:
if(preg_match('/.png|.gif|.jpg.|jpeg/', $value)):
echo "<tr><td>{$key}:</td><td class='italic'>{$value}</td></tr>";
else:
echo "<tr><td>{$key}:</td><td>{$value}</td></tr>";
endif;
endif;
else:
echo "<tr><td class='field-grey'>{$key}:</td><td class='field-empty'><span class='null'>null</span></td></tr>";
endif;
}
echo "</table>";
}
echo "<table class='outer'>";
$data = json_decode($json_raw, true);
foreach($data as $key=>$value){
if($value):
if(is_array($value)):
echo "<tr><td class='array'>{$key}:</td><td>";
JSON_to_HTML($value);
echo "</td></tr>";
else: echo "<tr><td>{$key}:</td><td>{$value}</td></tr>";
endif;
else: echo "<tr><td>{$key}:</td><td class='field-empty'><span class='null'>null</span></td></tr>"; endif;
}
echo "</table>";
?>
$s = '{"access": {"token": {"issued_at": "2008-08-16T14:10:31.309353", "expires": "2008-08-17T14:10:31Z", "id": "MIICQgYJKoZIhvcNAQcCoIICMzCC"}, "serviceCatalog": [], "user": {"username": "ajay", "roles_links": [], "id": "96d10efe549", "roles": [], "name": "ajay"}}}';
$crl = 0;
$ss = false;
echo "<pre>";
for($c=0; $c<strlen($s); $c++)
{
if ( $s[$c] == '}' || $s[$c] == ']' )
{
$crl--;
echo "\n";
echo str_repeat(' ', ($crl*2));
}
if ( $s[$c] == '"' && ($s[$c-1] == ',' || $s[$c-2] == ',') )
{
echo "\n";
echo str_repeat(' ', ($crl*2));
}
if ( $s[$c] == '"' && !$ss )
{
if ( $s[$c-1] == ':' || $s[$c-2] == ':' )
echo '<span style="color:#0000ff;">';
else
echo '<span style="color:#ff0000;">';
}
echo $s[$c];
if ( $s[$c] == '"' && $ss )
echo '</span>';
if ( $s[$c] == '"' )
$ss = !$ss;
if ( $s[$c] == '{' || $s[$c] == '[' )
{
$crl++;
echo "\n";
echo str_repeat(' ', ($crl*2));
}
}
echo $s[$c];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.