首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中获取[object对象]的内容?

如何在PHP中获取[object对象]的内容?
EN

Stack Overflow用户
提问于 2017-04-20 22:33:59
回答 2查看 589关注 0票数 1

我有一个负载的数据,用一些JSON发送,然后上传到数据库。当我试图将它写到我的数据库时,字段就是Object。这就是JSON的样子:

代码语言:javascript
复制
{
    "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中:

代码语言:javascript
复制
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之后,我尝试选择正确的密钥:

代码语言:javascript
复制
$data = $_POST['payload'];
$retrieved_data = json_decode($data, true);
$ip_address = $retrieved_data['data']['payload'];

当我将$ip_address写入我的数据库时,它会返回:

代码语言:javascript
复制
[object Object]

如果我试图在PHP中深入到一个层次:

代码语言:javascript
复制
$ip_address = $retrieved_data['data']['payload']['ip'];

它在我的数据库中添加了四个条目:

代码语言:javascript
复制
[
]
{ 
}

记录器的文档https://addpipe.com/docs#sending-custom-data-using-payload-variable说要在单引号之间传递自定义JSON:

代码语言:javascript
复制
payload: '{"ip":clientIP, "env":"test"}'

如果我试图将整个有效负载写入数据库:

代码语言:javascript
复制
$ip_address = $retrieved_data['data']['payload'];

它将以下内容写入字段,而不显示clientIP变量的内容:

代码语言:javascript
复制
{\"ip\":clientIP,\"env\":\"test\"}

如果我试图用这种方法进行更深层次的研究:

代码语言:javascript
复制
$ip_address = $retrieved_data['data']['payload']['ip'];

我得到了同样的四个条目:

代码语言:javascript
复制
[
]
{
}

所以我被困住了我不知道还能尝试什么。

我试着获取这里的信息:

代码语言:javascript
复制
"payload":"{\\\"ip\\\":111.111.111.11, \\\"env\\\": test}"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-21 21:44:38

根据文献资料,您提供了一个链接到:

为了正确地发送JSON,您有两个格式化选项:

  • 将JSON括在引号中,并通常编写JSON:payload:'{"a":"b"}'
  • 将JSON封装在双引号中,并从JSON payload:"{\"a\":\"b\"}"内部转义双引号

这一点似乎非常清楚:

代码语言:javascript
复制
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端解析它:

代码语言:javascript
复制
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中

代码语言:javascript
复制
$data = $_POST['payload'];
$retrieved_data = json_decode($data, true);
list($ip_address, $env) = explode("|", $retrieved_data['data']['payload']);
票数 1
EN

Stack Overflow用户

发布于 2017-04-20 22:46:42

我以前见过这类东西,基本上是JSON字符串作为JSON对象中的键的字符串值存储的。PHP将这个嵌套的JSON字符串作为一个字符串来处理,而不是在第一次遍历时对它进行解码,所以您必须分别进行。试试这个:

代码语言:javascript
复制
$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'];
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43531014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档