【问题标题】:Get a MySQL stored array in string format and convert to array in JSON object获取字符串格式的 MySQL 存储数组并转换为 JSON 对象中的数组
【发布时间】:2015-11-05 12:49:59
【问题描述】:

我有一个存储在 mysql 表中的数组,如下所示:

[3,5,6,7,8]

当我选择它时,将其编码为 PHP 中的 JSON,然后将其解析为一个 javascript 对象,而不是它成为一个数组,它只是变成一个字符串“[3,5,6,7,8]”。我知道不可能将它作为数组存储在单个字段中,所以.. 我该怎么做才能正确转换为数组而不是字符串?

我当前的代码:

test = JSON.parse('[{"id":43,"incidence":"[0,3,6,7]"}]')

我可以解决它删除字符串上的“,但是mysql用字符串返回它,php用引号编码,javascript用引号解析。所以基本上,有没有办法在这个过程中删除它?

【问题讨论】:

  • 你能显示你的代码吗?你是如何编码的,你是如何解析的?
  • 在你的初始解析之后,你有没有试过这个:JSON.parse(test[0].incidence) ?
  • 在您的数据库结果中,您是否总是只有 1 行结果?或者有时会不止一个?我问这个是因为目前你有一个数组数组,这使得在路上进行额外的迭代。

标签: javascript php mysql arrays json


【解决方案1】:

问题在于在将数组转换为 JSON 之前如何构建数组。由于您正在从数据库中检索这些结果,我假设您正在构建一个看起来像这样的多维数组:

$results = array(
    array(
        "id" => 43,
        "incidence" => "[0,3,6,7]"
    )
);

因为incidence 是一个字符串,所以在 JS 中使用它时会出现这些错误。要解决,您需要将该字符串转换为数组。现在,由于您可能有多个结果(因为这些是数据库结果),您需要遍历结果数组并将该字符串转换为这样的数组:

foreach ($results as &$row) { // <-- notice the & symbol (Passing by reference)
    $no_brackets = trim($row["incidence"], '[]');//if you stored your array as comma delimited value, you would not need this.
    $row["incidence"] = explode(',', $no_brackets);
}

最后,使用json_encode 并将其传递给JS。


最终结果:

<?php
foreach ($results as &$row) {
    $no_brackets = trim($row["incidence"], '[]');
    $row["incidence"] = explode(',', $no_brackets);
}
$json = json_encode($results);
?>

<script>
    var obj = JSON.parse('<?= $json ?>');
    console.log(obj);
</script>

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    你需要做一些小事才能让它工作。

    试试这个

    <?php
    
    $string = '[3,5,6,7,8]';
    $t = str_replace(array('[',']'), '', $string);
    $array = explode(',', $t);
    echo json_encode($array);
    

    结果是

    ["3","5","6","7","8"]
    

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 1970-01-01
      • 2012-05-20
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2019-03-04
      • 1970-01-01
      相关资源
      最近更新 更多