【问题标题】:PHP encode JSON (2 dimensional array)PHP 编码 JSON(二维数组)
【发布时间】:2013-04-09 23:20:48
【问题描述】:

我正在查询返回字段(message_type 和百分比)的表。 我使用 PHP 对 json 数据进行编码,这是我的做法

$json = array();
while ($row = odbc_fetch_array($rs)) {
  $json[][] = $row;
}
echo json_encode($json);

输出:

[ [ { "message_type" : "bullying",
      "percentage" : "60"
    } ],
  [ { "message_type" : "cheating",
      "percentage" : " 14"
    } ],
  [ { "message_type" : "Stress",
      "percentage" : "16"
    } ],
  [ { "message_type" : "Gang",
      "percentage" : "7"
    } ]
]

如您所见,json_encode 函数正在添加花括号、引号和对象键名。

我想要的只是将 json 解析为二维数组,这是所需的输出:

[
  ["bullying", 60],
  ["harrassment", 9],
  ["cheating", 14],
  ["Stress", 16],
  ["Gang", 7]
]

我也尝试手动对其进行编码,但无法获得所需的结果。

【问题讨论】:

  • $json[][] --- 为什么是[][]
  • @DaveRandom 你解决了我的问题,如果你把它添加为我会接受的答案

标签: php arrays json


【解决方案1】:

PHP 的json_encode() 使用了一定的魔法来确定给定的向量是编码为 JSON 对象还是数组,但简单的规则是:如果数组有连续的、零索引的数字键,它将被编码为一个数组。任何其他向量(对象或关联数组)都将被编码为对象。

因为您使用的是odbc_fetch_array(),所以您的结果行将作为关联数组返回,其中键是列名。要获得您想要的结果,您有 3 个选项:

通过array_values()传递结果行:

$json[] = array_values($row);

手动构造单个数组:

$json[] = array($row['message_type'], $row['percentage']);

或者最好的选择可能是使用odbc_fetch_row(),它会立即返回索引数组:

while ($row = odbc_fetch_row($rs)) {
    $json[] = $row;
}

【讨论】:

  • 感谢这解决了我的问题,感谢您的详细回答。我还注意到如果值小于 1,json_encode 会删除前导零,例如 0.23 ---> .23 我该如何避免这种情况?
  • @meda 如果数据是浮点数并且json_encode() 根本不会这样做,那将不会发生,我怀疑是 odbc 这样做(尽管对于任何环境来说这都是非常奇怪的行为) .你能在json_encode() 调用之前显示var_dump($json); 吗?
  • 这里是编码前的数组之一 [12]=>array(2) { [0]=> string(17) "Sexual Harrasment[1]=>string(12) "。 16638935100"}
  • @meda 是的,您可以看到前导零在传递给 JSON 之前已经被剥离。数据库中percentage列的数据类型是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多