我正在尝试用 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/