我在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。
感谢。
答案 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}}