在PHP中过滤包含对象的JSON数组
我有一个特定的JSON文件,如下所示:在PHP中过滤包含对象的JSON数组,php,arrays,json,database,Php,Arrays,Json,Database,我有一个特定的JSON文件,如下所示: [ { "objID":"kc6BvvNlVW", "string":"bill", "createdOn":"2018-09-18T01:51:02", "updatedOn":"2018-09-18T01:51:02", "number":1, "boolean":true, "array":["item1","item2"],
[
{
"objID":"kc6BvvNlVW",
"string":"bill",
"createdOn":"2018-09-18T01:51:02",
"updatedOn":"2018-09-18T01:51:02",
"number":1,
"boolean":true,
"array":["item1","item2"],
"pointer":{"type":"__pointer","objID":"hYtr54Ds","className":"Users"}
},
{
"objID":"sS1IwFPPWh",
"string":"tom",
"createdOn":"2018-09-18T01:59:40",
"updatedOn":"2018-09-18T01:59:40",
"number":12.3,
"boolean":false,
"array":["item1","item2"],
"pointer":{"type":"__pointer","objID":"tRe4Fda5","className":"Users"}
}
]
1。我需要首先检查对象的键入键内是否有“\uu指针”
,并在HTML表中仅显示objID值,如下所示:
[
{
"objID":"kc6BvvNlVW",
"string":"bill",
"createdOn":"2018-09-18T01:51:02",
"updatedOn":"2018-09-18T01:51:02",
"number":1,
"boolean":true,
"array":["item1","item2"],
"pointer":{"type":"__pointer","objID":"hYtr54Ds","className":"Users"}
},
{
"objID":"sS1IwFPPWh",
"string":"tom",
"createdOn":"2018-09-18T01:59:40",
"updatedOn":"2018-09-18T01:59:40",
"number":12.3,
"boolean":false,
"array":["item1","item2"],
"pointer":{"type":"__pointer","objID":"tRe4Fda5","className":"Users"}
}
]
“tRe4Fda5”
现在,我的桌子是这样的:
下面是我的foreach
PHP代码(放入表行):
没有逗号分隔符,因此这是我需要编辑的代码行:
echo json_encode($v); // <-- WHAT SHOULD I DO HERE ?
echo json_encode($v);// 而不是
foreach($value as $k=>$v){
// $v is a Pointer
使用
而不是
foreach($value as $k=>$v){
// $v is a Pointer
使用
在第二个循环中,您可以查看对象是否具有名为type的属性,以及该属性是否设置为uu指针
foreach($jsonObjs as $i=>$obj) {
$row_id = $i;
foreach($obj as $key => $value){
// see if $value has a type property that is set to pointer
if (isset($value['type']) && $value['type'] == "__pointer") {
// $value is the pointer object. Do with it what you will
echo "<td>" . $value['objID'] . "</td>";
}
// more code
}
}
foreach($jsonobjsas$i=>$obj){
$row_id=$i;
foreach($obj作为$key=>$value){
//查看$value是否具有设置为指针的类型属性
如果(isset($value['type'])&&$value['type']==“\uu指针”){
//$value是指针对象。请随意使用它
回显“$value['objID']”;
}
//更多代码
}
}
在第二个循环中,您可以查看对象是否具有名为type的属性,以及该属性是否设置为_指针
foreach($jsonObjs as $i=>$obj) {
$row_id = $i;
foreach($obj as $key => $value){
// see if $value has a type property that is set to pointer
if (isset($value['type']) && $value['type'] == "__pointer") {
// $value is the pointer object. Do with it what you will
echo "<td>" . $value['objID'] . "</td>";
}
// more code
}
}
foreach($jsonobjsas$i=>$obj){
$row_id=$i;
foreach($obj作为$key=>$value){
//查看$value是否具有设置为指针的类型属性
如果(isset($value['type'])&&$value['type']==“\uu指针”){
//$value是指针对象。请随意使用它
回显“$value['objID']”;
}
//更多代码
}
}
对不起,没有肯定的结果,我得到的是空白数据,它什么也不打印,如图所示:以上是您第一个问题的答案。只需打印json_decode($k)n检查你是否得到一个有值的键我知道,但在我这方面,它不起作用,我做的是:foreach($obj as$key=>$value){if(is_array($value)){echo'';foreach($k)value as$k){if($k->type===''\uu指针'){echo json_decode($k);//在这里你将得到正确的键和值}($k->type===''\u pointer'){print_r(json_decode($k));exit;//在这里检查您是否使用键获取值,第二件事是如何将其存储在数据库中对不起,没有肯定的结果,我得到的是空白数据,它不会输出任何内容,如下所示:以上是您第一个问题的答案。只需打印json_decode($k)n检查你是否得到一个有值的键,我知道,但是我知道,它在我这方面不起作用,这里是我做的:foreach($obj as$key=>value){if(is_array($value)){echo'';foreach($value as$k){if($k->type==='''.\u pointer'){echo json解码($k);//在这里你将得到正确的键和值}}如果($k->type===''''.\u pointer'){print\r(json_decode($k));exit;//检查此处是否使用key或not获取值,第二件事是如何将其存储在数据库中问题是我必须使用动态键,因此您设置了$obj['pointer'],但对象的名称并不总是“pointer”,它可能会有所不同,这就是我使用所有这些循环的原因,我必须始终基于JSON对象获取$keys。类似于指针对象的结构的属性名称应始终为“pointer”,因此,您可以直接转到指针,而不是四处查看对象是否包含类似指针的内容。这很有效,非常感谢!关于我的第二个问题,关于不显示为0的布尔值假值如何?PS:尽管现在我的“数组”列只显示“数组”,而不是“item1”和“item2”还有……对于布尔值,您需要这样的内容:else if(is_bool($value)){echo'.($value?'1':'0');}
问题是我必须使用动态键,所以您设置了$obj['pointer'],但对象的名称并不总是“pointer”,它可能会有所不同,这就是我使用所有这些循环的原因,我必须始终基于JSON对象获取$keys。类似于指针对象的结构的属性名称应始终为“pointer”,因此,您可以直接转到指针,而不是四处查看对象是否包含类似指针的内容。这很有效,非常感谢!关于我的第二个问题,关于不显示为0的布尔值假值如何?PS:尽管现在我的“数组”列只显示“数组”,而不是“item1”和“item2”还有…对于布尔值,您需要这样的东西:否则如果(is_bool($value)){echo'.($value?'1':'0')。;}
@VenIfy是的,我刚刚用echo检查过,它会给出TRUE,因为它只对其他值数组(无键)给出TRUE@VenIfy是的,我刚刚用一个echo进行了检查,它给出了TRUE,正如它为另一个只包含值(无键)的数组提供TRUE一样