【问题标题】:php/mysql write array to json filephp/mysql 将数组写入 json 文件
【发布时间】:2016-02-11 19:39:48
【问题描述】:

我有以下问题,我的 php 代码从 dB 获取所需的数据:

<?php

require('dB_connect.php');

$reportID = intval($_GET['q']);


$sql = "SELECT nmech, nelect, nplant, ncivil FROM `flashreport` WHERE ID = '".$reportID."'";
$result = mysqli_query($dbc, $sql);

$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
    $emparray[] = $row;
}
file_put_contents("newport.json", json_encode($emparray,JSON_FORCE_OBJECT));

mysqli_close($dbc);

?>

如您所见,这会写入 json 文件 - 结果:

{"0":{"nmech":"2.00","nelect":"2.00","nplant":"2.00","ncivil":"2.00"}}

当我使用以下 js 代码从 json 文件中提取时:

$.getJSON('newport.json', function(data) {
console.log(data);

使用 chrome 的控制台日志显示如下:

[Object]
0: Object
nmech: "3.00"
__proto__: Object
length: 1

只显示第一个键/值对而不是所有 4 K/V 对?有人可以解释一下我做错了什么吗?

【问题讨论】:

  • 试试console.log(data[0]);
  • 你检查过file_put_contents是否成功了吗?您只是假设已写入更新的 json 文件。
  • 您在执行控制台日志和文件时的示例中的 nmech 值不正确。
  • 试过 console.log(data[0]);结果是对象 {nmech: "3.00"}
  • @themightysapien - 先生,您能详细说明一下吗?

标签: javascript php mysql json


【解决方案1】:

将结果写入 json 文件太过分了,恕我直言。为什么不直接将 json 添加到模板或页面视图 (PHP) 中。

<script>
    // Create settings from PHP/Session and 
    // Initialize Registration Namespace
    var registrationSettings = <?php echo (!empty($data)) ? @json_encode($data) : json_encode(array()); ?>;
    Registration.init({ settings: window.registrationSettings });
</script>

显然,您没有注册命名空间对象,但这只是在页面首次加载时从 PHP 设置设置的示例方法。

你真正需要它来输出一些数据。

<script>
    var newport = <?php echo (!empty($emparray)) ? @json_encode($emparray) : json_encode(array()); ?>;
</script>

或者也许是更简单的写法。

<script>
    var newport = <?php echo (!empty($emparray)) ? @json_encode($emparray) : '[]'; ?>;
</script>

我可以看到您尝试归档(或缓存)结果。您可能应该在 PHP 控制器中编写一个 AJAX 方法来处理请求。数据可以缓存在 Memcached 或其他一些快速数据处理程序中的服务器端。大多数 PHP 框架都支持 memcached。

【讨论】:

  • 听取了您的建议并编写了一个 AJAX 方法,效果很好,不知道为什么 jQuery 不起作用?
  • 可能是服务器没有提供带有正确标头的 json 文件。使用 PHP,您应该手动设置标题: header('Content-type: application/json'); echo json_encode($output);
【解决方案2】:

没关系,因为您的 PHP 数组如下所示:

<?php 
$arr = [
    [
        "key1" => "value1",
        "key2" => "value2",
    ]
]

您必须使用 data[0]['key'] 来访问第一个元素的 key1 部分。

另一个(更好的解决方案)是不要在 php 中使用 while 循环,因为您希望从 mysql 返回 1 个元素。然后像这样使用:

<?php
require('dB_connect.php');
$reportID = intval($_GET['q']);

$sql = "SELECT nmech, nelect, nplant, ncivil FROM `flashreport` WHERE ID = '".$reportID."'";
$result = mysqli_query($dbc, $sql);

//Get first row from db.
$emparray = mysqli_fetch_assoc($result);
file_put_contents("newport.json", json_encode($emparray,JSON_FORCE_OBJECT));

mysqli_close($dbc);
?>

现在您的数据将像您在开始时所期望的那样使用 javascript。

【讨论】:

  • 已经尝试了你的建议,但这没有用,仍然只输出相同的对象 {nmech: "3.00"}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 2017-07-13
  • 2016-01-06
相关资源
最近更新 更多