在PHP中过滤包含对象的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"],

我有一个特定的JSON文件,如下所示:

[
    {
        "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一样