任何在PHP中JSON.parse a POST的方法


Any way to JSON.parse a POST in PHP?

我知道它可以在 Ruby 中完成,但我需要解析 PHP 中数组中的数组。

POST
{
Payload
{
amount="xxx",
uid="xxx",
actual_amount="xxx"
},
signature
}

我可以使用 $_POST['payload'] 访问有效负载,但是如何访问有效负载数组中的元素呢?从技术上讲,有效负载是一个JSON数组。喜欢这个

a:2:s:7:"payload";s:61:"{"amount":25,"adjusted_amount":17.0,"uid":"brainiac"}";s:9:"signature";s:40:"fbc4e6081d2d1d5d3894dd26a09c4d6b97c9e591";}

如果您仔细观察 JSON 数组,您会注意到有效负载数组根本不是数组。是绳子!(s:#)

有一个名为 json_decode() 的函数,它将帮助您执行此任务。

$payload = json_decode($_POST['payload']);
var_dump($payload['amount']); // string(3) "xxx"

我终于想通了。即:

<?php
$post = array();
$post['array1'] = json_encode(array(
    'info1' => 'test 1',
    'info2' => 'test 2',
    'info3' => 'test 3'
));
$post['info4'] = '#';
echo serialize($post);
echo "'n";
var_dump(unserialize(serialize($post)));
?>

http://codepad.org/jaHT6lfW

给:

a:2:{s:6:"array1";s:52:"{"info1":"test 1","info2":"test 2","info3":"test 3"}";s:5:"info4";s:1:"#";}
array(2) {
  ["array1"]=>
  string(52) "{"info1":"test 1","info2":"test 2","info3":"test 3"}"
  ["info4"]=>
  string(1) "#"
}

所以:

<?php
$post = array();
$post['array1'] = json_encode(array(
    'info1' => 'test 1',
    'info2' => 'test 2',
    'info3' => 'test 3'
));
$post['info4'] = '#';
$serial = serialize($post);
echo "$serial'n";
$unserial = unserialize(serialize($post));
var_dump($unserial);
$unserial['array1'] = json_decode($unserial['array1']);
var_dump($unserial);
?>

http://codepad.org/mpfDLyvH

提供正确的输出。

说真的,只需在使用$_POST数组后,在将其插入数据库之前,对全部进行 JSON 编码。如果你这样做,你就不必担心这种废话。为了理智起见,您的数据实际上应该只使用每个字段一个常量类型进行序列化。