如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]

Posted

技术标签:

【中文标题】如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]【英文标题】:How to convert json encoded PHP array to an array in Javascript? [duplicate] 【发布时间】:2013-08-19 15:31:02 【问题描述】:

我正在使用 AJAX 从 php 文件中获取 JSON 编码的数组,但在 javascript 中我需要将其用作数组,如何在 Javascript 中创建数组?

我对 PHP 文件的 AJAX 调用:

  $.ajax(
    type:"POST",
    url:"ajaxfetch.php",
    success:function(result)
            alert(result);
             
    );

在 PHP 文件中创建的数组:

Array
(
    [0] => Array
        (
            [id] => 4
            [deviceID] => xyz123
            [latitude] =>  -33.80010128657071
            [longitude] => 151.28747820854187
            [altitude] => 34.78788787
            [createdDate] => 2013-08-15 23:00:00
            [delete] => 0
        )

    [1] => Array
        (
            [id] => 5
            [deviceID] => jdkfhjskh344
            [latitude] => -33.950198
            [longitude] => 151.259302
            [altitude] => 76.44455
            [createdDate] => 2013-08-15 21:50:42
            [delete] => 0
        )

    [2] => Array
        (
            [id] => 1
            [deviceID] => abc223
            [latitude] => -33.890542
            [longitude] => 151.274856
            [altitude] => 21.4454455
            [createdDate] => 2013-08-15 20:00:00
            [delete] => 0
        )

)

我在 PHP 中对这个数组进行了 json 编码,但 AJAX 检索了它并以字符串形式输出

ABOVE ARRAY json 编码如下:

$data = array();
$data = $locate_obj->getAllDeviceLocation();


echo json_encode($data);

json_encode 的输出

["id":"4","deviceID":"xyz123","latitude":" -33.80010128657071","longitude":"151.28747820854187","altitude":"34.78788787","createdDate":"2013-08-15 23:00:00","delete":"0","id":"5","deviceID":"jdkfhjskh344","latitude":"-33.950198","longitude":"151.259302","altitude":"76.44455","createdDate":"2013-08-15 21:50:42","delete":"0","id":"1","deviceID":"abc223","latitude":"-33.890542","longitude":"151.274856","altitude":"21.4454455","createdDate":"2013-08-15 20:00:00","delete":"0"]

我正在寻找可以在 Javascript 中创建一个数组的方法,该数组使用我在 ajax 响应中收到的输出,以便我可以提出一个格式数组:

var locations = [
      ['Bondi Beach', -33.890542, 151.274856, 4],
      ['Coogee Beach', -33.923036, 151.259052, 5],
      ['Cronulla Beach', -34.028249, 151.157507, 3],
      ['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
      ['Maroubra Beach', -33.950198, 151.259302, 1]
    ];

【问题讨论】:

为什么不在服务器端以这种格式对数据进行编码?如果要解析 JSON,请使用 JSON.parse 或在 $.ajax 调用中设置 dataType: 'json' 选项或在 PHP 中设置正确的响应标头。 我也是这样做的,在 php 代码中我做了 json_encode(myarray) 并回显了它...不是我希望将其转换为 Javascript 所需的维度数组...。 但是 PHP 中的数组格式与 JavaScript 中的数组格式不同。所以这就是我要问的原因,为什么不在服务器端以正确的格式创建数据? 这就是我需要做的......但我不知道如何实现这一目标 那就去做吧! Javascript 和 PHP 中的数组并没有什么不同。 【参考方案1】:

这个问题有三种解决方案:

Call JSON.parse explicitly and pass the response text to it。返回值将是 JavaScript 数据类型。

在您的 $.ajax 调用中设置 dataType: 'json' 选项,以便 jQuery 为您解析 JSON。

在 PHP 中设置正确的response headers for JSON。 jQuery 也会自动检测头部并解析 JSON。

如果您想在客户端修改结构,请查看Access / process (nested) objects, arrays or JSON。

【讨论】:

【参考方案2】:
http://api.jquery.com/jQuery.getJSON/

$.getJSON('ajaxfetch.php', function(data) 
  var locations = []; 

  $.each(data, function(key, val) 
    locations[val.deviceID] = [];
    locations[val.deviceID].push(val.id);
    locations[val.deviceID].push(val.latitude);
    locations[val.deviceID].push(val.longitude);
  );
);

没有经过 100% 的测试,但它是正确的。不确定从哪里获得位置名称,因为它不在数组中,所以我使用了 deviceID。使用 getJSON 应该会让您的生活更轻松。

【讨论】:

【参考方案3】:

确保您的输出是有效的 JSON,然后在您的 jQuery AJAX 请求中指定 dataType: "json"

$.ajax(
    type: "POST",
    url: "ajaxfetch.php",
    dataType: "json",
    success: function (result) 
        console.log(result); //Now a JSON object
    
);

【讨论】:

未解决所需的数组转换。【参考方案4】:
var locations = [];
$.ajax(
    type: "POST",
    url: "ajaxfetch.php",
    dataType: "json",
    success: function (result) 
       result.forEach(function(loc)  locations.push(new Array(loc.deviceID, loc.latitude, loc.longitude, loc.id)) );
       // locations is now in desired format (except non-existent place name)
    
);

【讨论】:

OP 已经在 PHP 中对字符串进行了 json 编码。问题出在 JavaScript,还有一个更简单的解决方案。 他的问题表明并非如此。输出不是 JSON,是 print_r 或 var_dump 的输出。

以上是关于如何将 json 编码的 PHP 数组转换为 Javascript 中的数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将此对象转换为 PHP 中的数组

如何将php json数组转换为yaml

如何使用 PHP 将 JSON 字符串数据转换为数组?

如何将带单引号的字符串转换为双引号以进行 json 解析

PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?

如何正确运用PHP json