如何将大量数据编码为json

时间:2014-08-26 05:14:28

标签: php json mysqli

我需要能够将json从php传递给客户端,以便javascript可以解析代码并将其返回。目前,我一直这样做的方式是:

<?php
    $mysql_query = $mysqli->query(QUERY GOES HERE);
    $array - array();
    while($row = $mysql_query->fetch_assoc()){
        array_push($array, $row);
    }
    $json =json_encode($array);
?>
<!-- javascript -->
<script>
    var json = <?php echo $json;?>;
    //...
</script>
<!--- rest of html --->

这通常有效。但是,查询返回的行数超过100,000,并且php在创建整个数组时当前内存不足。我见过有人说使用ajax。这是唯一的方法吗?如果是这样,我将如何实施它呢?或者是否有更有效的方法将mysql数据编码为没有ajax的json?

谢谢

3 个答案:

答案 0 :(得分:1)

既然你说你也可以发送你的数据块,这意味着你可以通过多种方式处理你的数据,我考虑这样做:

  • 在正常的php数组中以小块(内存方式)获取数据库数据。 这样做可以unset先前分配的块来释放内存。
  • JSON将您的部分数据编码为HTML元素。

像这样:

<input id="json-1" type="hidden" data-json='<?php echo json_encode($chunk[0]); ?>' />
<input id="json-2" type="hidden" data-json='<?php echo json_encode($chunk[1]); ?>' />
<input id="json-3" type="hidden" data-json='<?php echo json_encode($chunk[2]); ?>' />

是的,看起来很丑陋但考虑一些优点:

  • 没有巨大的javascript JSON对象,占用了客户端的内存
  • 您可以以渐进方式解析数据,因此只消耗一部分内存

javascript处理

 $(document).ready(function() {
    $("input[id^='json-']").each(function() {
       var json = $(this).data("json");

       // process the chunkied 'json'

       // remove the memory allocated (since you dont want anymore the huge data, probably)
       $(this).removeData(this,"json")
    });
 });

答案 1 :(得分:0)

如果您想将某些内容从php传递到javascript,则必须使用ajax,因为php是服务器端而javascript是客户端。

拥有100,000行的数组有点大,可能会导致问题。考虑将数组拆分为较小的块或限制查询。

您可以增加php内存限制,但最好先优化阵列。

答案 2 :(得分:-2)

您不需要处理如此大量的数据。 分为几页。