PHP json_encode($_POST) 和 mySQL 问题

标签 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。

谢谢。

最佳答案

如果我有 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 编码的,并且和和;)

关于PHP json_encode($_POST) 和 mySQL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729768/

相关文章:

php - CakePhp : Cake bake doesn't work on Ubuntu.(PDO异常)

C++ MySQL 连接器无 utf8

mysql - SQL 连接问题和 where 子句

c# - 在 c# 中从数据库检索数据到 dataGridView 时出现空行

php - 如何使用 PHP 在 MySQL 中插入空间数据?

php - WordPress page-columnist,更改默认页面类型

php - 为什么 Symfony2 在登录时替换 PHPSESSID?

javascript - PHP如何选择并读取csv文件内容而不上传

mysql - 从laravel 4中的json数组获取元素

php - doctrine select 语句总是返回表的所有字段