在PHP中解析JavaScript数组

7

我似乎无法弄清如何将JS数组传递到PHP中。

我所拥有的内容看起来像这样:

var arrLow = [
{
"e": "495864",
"rank": "8678591",
"rankmove": "<p><img src='up.php?uStyle=144'> UP 495864"
},
{
"e": "104956",
"rank": "-",
"rankmove": "<p><img src='up.php?uStyle=145'> DOWN 1"
},
{
"e": "0",
"rank": "0",
"rankmove": "<p><img src='up.php?uStyle=975'> NEW"
}
]

json_decode和其他函数只返回NULL,谷歌上只有一些奇怪的方法可以使用JS理解的浏览器从HTTP POST中使用serialize(),但这在这里真的行不通。

有人知道如何解决吗? :x

==========================================================================

编辑:谢谢大家!我不知道它是这么容易的。

<?php 
$json = file_get_contents('24d29b1c099a719zr8f32ce219489cee.js');
$json = str_replace('var arrLow = ','' ,$json);
$data = json_decode($json);
echo $data[0]->e;
?>

你是在尝试将数组复制/粘贴到PHP中吗?通常,您发送到PHP的任何JS数组都将以某种形式进行序列化。您能举个例子说明您如何尝试使用它吗? - mway
一个 cron 作业(不在我的控制下)会抓取它并将其保存为 example.js。它每小时都会更改,我只是将其读入 PHP 然后尝试解析它。它基本上看起来像一个纯文本文件,我只能使用 PHP(或 bash)来处理它。 - jen
你可以尝试使用以下代码:var_dump(json_decode($arrLow)); 其中 $arrLow 通常是通过表单或 AJAX 从 JavaScript 发送过来的。 - Michael Mao
4个回答

8
你可以使用json_decode()来实现。关键是要去掉var arrLow =部分(只留下数组本身)。你可以像这样将值赋给php变量$arrLow:
$js = '[ {"e" : "495864", ...';
$arrLow = json_decode($js);

一种快速且不太正规的方法是使用strstr()函数来删除开头。

$js = strstr('var arrLow = [ {..', '[');

strstr()和str_replace()哪个更快呢?只是好奇。 - jen
我不确定,但我猜strstr()应该更快。我无法确认,但php.net上的某个人发现strstr()比表达式strpos() !== false(http://ch2.php.net/manual/en/function.strstr.php#39236)更快。如果这是真的,那么它可能比`str_replace()`快得多。 - svens
好的,已更新为使用 strstr。非常感谢您的帮助,真的很感激。没想到这么容易.. - jen

1
//define javascript array 
>var mainArray = {};    
>       // inner loops
mainArraySub['XXX'] = [];    

             mainArray = JSON.stringify(mainArray);
      passing javascript array content in jquery ajax request as 
      $.ajax({
       type: "POST",
     data:{paramval:mainArray},
     dataType: "json",
    url: url,
   success: function(msg){

          }
      });    


in POST request you will get as below

{"row1":{"0":{"nnnn":"aaaa"},"1":{"Movie":"aaaa"},...}        

// in a.php file call as below

$Info = $_REQUEST['rowdata'];
$tre = json_decode(stripslashes($Info),true);
var_dump($tre);        

1

有两个选项:

  1. 只需删除前面的var arrLow =(如果是变量可能需要使用正则表达式),然后解析为JSON。
  2. 选择全面的 JavaScript解析

0

根据JSONLint验证工具,这是有效的JSON(不包括var arrLow =)。因此,任何好的json_decode()实现都应该可以解决问题。也许你使用的实现有一定的限制?JSON.org网站上有一个很棒的链接列表,其中包含PHP中json_decode的实现(以及其他语言的实现)。您可以确信找到一个可以正常工作的实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接