我有一个负载的数据,用一些JSON发送,然后上传到数据库。当我试图将它写到我的数据库时,字段就是Object。这就是JSON的样子:
{
"version":"1.0",
"event":"video_recorded",
"data":{
"videoName":"vsrtc1492808825_223",
"audioCodec":"NellyMoser ASAO",
"videoCodec":"H.264",
"type":"FLV",
"orientation":"landscape",
"id":"315414",
"dateTime":"2017-04-21 14:07:12",
"timeZone":"America/Los_Angeles",
"payload":"{\\\"ip\\\":111.111.111.11, \\\"env\\\": test}",
"httpReferer":"https://app.surveygizmo.com/projects/previewbottom?id=3489282&__sgtarget=3&sLanguage=English&__sg_build_test=1&__sg_collab_test=1&__sg_tester=SW5mb0BNb29uc0FuYWx5dGljcy5jb20%3D&__sg_tester_name=TW9vbnMgQW5hbHl0aWNz&__sg_tester_id=351560&link_id=0&__sg_skip_actions=1&__ignore_entry_logic=1&?preview_frame=true"
}
}在嵌入代码JavaScript中,我将这个变量传递到闪存中,以便将其添加到json中:
var clientIP = '11.11.111.1111';
var payload_data = {"ip":clientIP, "env":"test"};
var flashvars = {qualityurl: "avq/300p.xml",accountHash:"randomstuff", eid:2, showMenu:"true", mrt:120,sis:0,asv:1,mv:0, payload: payload_data};在解码完整个JSON之后,我尝试选择正确的密钥:
$data = $_POST['payload'];
$retrieved_data = json_decode($data, true);
$ip_address = $retrieved_data['data']['payload'];当我将$ip_address写入我的数据库时,它会返回:
[object Object]如果我试图在PHP中深入到一个层次:
$ip_address = $retrieved_data['data']['payload']['ip'];它在我的数据库中添加了四个条目:
[
]
{
}记录器的文档https://addpipe.com/docs#sending-custom-data-using-payload-variable说要在单引号之间传递自定义JSON:
payload: '{"ip":clientIP, "env":"test"}'如果我试图将整个有效负载写入数据库:
$ip_address = $retrieved_data['data']['payload'];它将以下内容写入字段,而不显示clientIP变量的内容:
{\"ip\":clientIP,\"env\":\"test\"}如果我试图用这种方法进行更深层次的研究:
$ip_address = $retrieved_data['data']['payload']['ip'];我得到了同样的四个条目:
[
]
{
}所以我被困住了我不知道还能尝试什么。
我试着获取这里的信息:
"payload":"{\\\"ip\\\":111.111.111.11, \\\"env\\\": test}"发布于 2017-04-21 21:44:38
根据文献资料,您提供了一个链接到:
为了正确地发送JSON,您有两个格式化选项:
payload:'{"a":"b"}'payload:"{\"a\":\"b\"}"内部转义双引号这一点似乎非常清楚:
var clientIP = '11.11.111.1111';
var payload_data = JSON.stringify({ip:clientIP, env:"test"});
var flashvars = {qualityurl: "avq/300p.xml",accountHash:"randomstuff", eid:2, showMenu:"true", mrt:120,sis:0,asv:1,mv:0, payload: payload_data};然而,这显然是行不通的。在远程服务器上解决这个问题之前,您可以尝试发送一个分隔字符串,然后在PHP端解析它:
var clientIP = '11.11.111.1111';
var payload_data = clientIP + '|test';
var flashvars = {qualityurl: "avq/300p.xml",accountHash:"randomstuff", eid:2, showMenu:"true", mrt:120,sis:0,asv:1,mv:0, payload: payload_data};然后在PHP中
$data = $_POST['payload'];
$retrieved_data = json_decode($data, true);
list($ip_address, $env) = explode("|", $retrieved_data['data']['payload']);发布于 2017-04-20 22:46:42
我以前见过这类东西,基本上是JSON字符串作为JSON对象中的键的字符串值存储的。PHP将这个嵌套的JSON字符串作为一个字符串来处理,而不是在第一次遍历时对它进行解码,所以您必须分别进行。试试这个:
$data = $_POST['payload'];
$retrieved_data = json_decode($data, true);
$ip_address_json = $retrieved_data['data']['payload'];
// Now decode the nested JSON string
$ip_address = json_decode($ip_address_json, true);
echo $ip_address['ip'];https://stackoverflow.com/questions/43531014
复制相似问题