PHP json_encode($ _ POST)和mySQL问题

时间:2017-12-09 14:48:34

标签: php mysql

我在PHP中尝试json_encode($_POST),但我遇到了一个小问题。

在我的$_POST上,我有时会得到一些编码的JSON,如下所示:

Array
(
    [module] => {"media":true}
)

module包含JSON字符串的位置。我的问题是,当我使用json_encode($POST);时,我得到了这样的结果:

{"module":"{\"petMedia\":true}"}

尝试插入mySQL JSON列,我收到此错误

Invalid JSON text: "Missing a comma or '}' after an object member.

以前我不可能解码字符串,因为并不总是我得到编码的JSON。

感谢。

2 个答案:

答案 0 :(得分:2)

如果我有POST变量,有时他们在其中编码了json,或者没有...处理它的一种方法,将是一个清理循环。

让我们说这是POST:

$_POST -> 'var1' = 'some string'
       -> 'var2' = '2315'
       -> 'var3' = '{"some":"json"}'

现在,我会设置一个更清洁,因为你不能只是json_encode($_POST),因为你发现。它对var3进行双重编码。

$clean = array();
foreach($_POST as $key => $val) {
    json_decode($val);// test
    if (json_last_error() == JSON_ERROR_NONE) {
        $clean[$key] = json_decode($val);// $val is json, so pre-decode it
    } else {
        $clean[$key] = $val;// its not real json, so assign straight
    }
}
print_r($clean);
print_r(json_encode($clean));

结果:

Array (
    [var1] => some string
    [var2] => 2315
    [var3] => stdClass Object
        (
            [some] => json
        )
)
// this then is a json encoded string, which is good:
{"var1":"some string","var2":2315,"var3":{"some":"json"}}

基本上,这会创建一个完整的对象,您现在可以安全地存储到数据库中,因为所有变量及其值都是json可编码的。

我希望这有助于你开始,并且你实际上在json字符串中没有正常的变量,它们不是json编码的,而且和和;)

答案 1 :(得分:0)

主题的变体或许

/* emulate POST */
$_POST=array(
    'php'=>'fantastic',
    'javascript'=>'awesome',
    'asp'=>'awful',
    'module'=>json_encode( array( 'media' => true ) )
);

/* process the POST array and decode any json data within */
array_walk( $_POST, function( &$value ){
    $tmp=json_decode( $value );
    if( json_last_error() == 0 )$value=$tmp;
});

/* encode the POST data */
$encoded=json_encode( $_POST );

输出:

{"php":"fantastic","javascript":"awesome","asp":"awful","module":{"media":true}}