【问题标题】:How to filter json into specific format (removing certain parts)如何将 json 过滤为特定格式(删除某些部分)
【发布时间】:2019-10-11 21:00:04
【问题描述】:

我正在将 MySQL 转换为 json 并且输出提供的比我想要的要多,所以我想将它过滤为每个段的几个值。

我尝试过寻找类似的问题,但还没有找到我真正理解得足以适应这个特定用例的问题。

这是我生成 json 的方法

$rows = array();
  while($r = mysqli_fetch_array($result)) {
    $rows[] = $r;
  }

  $json_string = json_encode($rows, JSON_PRETTY_PRINT);

这是一个输出示例

[
    {
        "0": "1",
        "id": "1",
        "1": "2019-05-25 14:38:10",
        "timestamp": "2019-05-25 14:38:10",
        "2": "4",
        "category": "4"
    },
    {
        "0": "2",
        "id": "2",
        "1": "2019-05-25 14:38:15",
        "timestamp": "2019-05-25 14:38:15",
        "2": "3",
        "category": "3"
    }
]

我想要的是更像这样的东西

[
  {
    "category": "4",
    "timestamp": "2019-05-25 14:38:10"
  },

  {
    "category": "3",
    "timestamp": "2019-05-25 14:38:15"
  }
]

【问题讨论】:

  • 您可以将查询设置为仅返回您需要的字段,即 SELECT 类别,timestamp FROM myTable;

标签: php mysql json filtering


【解决方案1】:

更改您的 SQL 查询
SELECT * ...

(或者你的 SELECT 子句是什么样的)到

SELECT category, timestamp ...

那么你的 PHP 代码可以是单行的:

$json_string = json_encode($result->fetch_all(MYSQLI_ASSOC), JSON_PRETTY_PRINT);

【讨论】:

    【解决方案2】:

    您可以尝试在输出中仅获取这两列。或者,您可以使用MYSQLI_ASSOC 常量来获取结果行作为关联数组。

    <?php
    $rows = array();
    while($r = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        $rows[] = array(
            "category" => $r["category"],
            "timestamp" => $r["timestamp"]
        );
    }
    
    $json_string = json_encode($rows, JSON_PRETTY_PRINT);
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 2021-06-25
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多