计数JSON结果中的项目

时间:2018-09-26 11:50:44

标签: php json

我正在计算行数是我的JSON结果 但是我也在尝试计算结果中的项目数。

行计数有效,但项目计数无效。 遇到错误:尝试在$ FLCount行上获取非对象的属性

代码在下面

// Counts The Rows - WORKS 
$row = $obj->response->result->Accounts->row;
$countRows = count($row);

// Counts The FL Items ( Doesn't Work )
$FLCount= $obj->response->result->Accounts->row->FL;
$countItems = count($FLCount);

JSON结果代码段

{
  "response": {
    "result": {
      "Accounts": {
        "row": [
          {
            "no": "1",
            "FL": [
              {
                "val": "ITEM 1",
                "content": "XX"
              },
             {
                "val": "ITEM 2",
                "content": "XX"
              },
              {
                "val": "ITEM 3",
                "content": "XX"
              }
            ]
          }
        ]
      }
    }
  }
}

3 个答案:

答案 0 :(得分:1)

出现错误是因为$obj->response->result->Accounts->row不是对象而是行数组。

要计算所有项目,无论行是什么,您都可以循环浏览各行,然后累加每行中的项目数:

// Counts The Rows - WORKS 
$rows = $obj->response->result->Accounts->row;
$countRows = count($rows);

// Counts The FL Items ( Doesn't Work )
$countItems = 0;
foreach ($rows as $row) {
    $countItems += count($row->FL);
}

答案 1 :(得分:0)

(编辑:不幸的是,我误解了您的要求,我的答案解决了将其计入JAVASCRIPT而不是php的解决方案)

第一个问题:

一个是array,另一个是object。在这种情况下,您可以使用:

element.length

代替

count(element)

第二个问题:

您的实际问题由用户@niiwig很好地表达了!但是,要使其更短,请使用:

var amount=0; JSON.parse(YOUR_RESPONSE).response.result.Accounts.row.every((obj) => amount += obj.FL.length  ); 

amount变量将具有正确的数字。

答案 2 :(得分:0)

$FLCount= $obj->response->result->Accounts->row[0]->FL;

$countItems = count($FLCount);