Php 访问$x->output->0->actions as->0->的问题不起作用

Php 访问$x->output->0->actions as->0->的问题不起作用,php,json,Php,Json,请说明如何解析此json响应: { "info": { "apiVersion": "1.1", "clientFeatures": ["all"], "clientTime": "2014-11-27T23:04:27.542Z", "emotions": [], "input": "who+created+you", "isNewUser": true, "locale": "en", "location": "53.0%2C9.0", "login": "mashape", "respon

请说明如何解析此json响应:

{ "info": { "apiVersion": "1.1", "clientFeatures": ["all"], "clientTime": "2014-11-27T23:04:27.542Z", "emotions": [], "input": "who+created+you", "isNewUser": true, "locale": "en", "location": "53.0%2C9.0", "login": "mashape", "responseTime": 948 }, "output": [{ "actions": { "custom": {}, "say": {"text": "I was created by the cool guys from Pannous."} }, "entities": { "dialoguesInfo": { "dialog": "Sandbox", "dialog_id": "63", "forced": false, "initiative": false, "match_id": "205233", "matchscore": "3.77", "response_id": "205224" }, "input": "who+created+you", "locale": "en" }, "responseTime": 673, "results": {} }] }
我想在:输出->动作->说中得到结果

我已经尝试过:$req=$response->raw_body;foreach$req为$ob->$val{} 但不起作用


我也尝试过json_decode,但没有成功。

正如Tomasz Kowalczyk所建议的那样,json_decode是一个很棒的本机函数

有时,当代码不能按您期望的方式工作时,可能会令人沮丧,但人们确实在尽力提供帮助。当某件事情不能按你想要的方式工作时,一定要包括它是如何不适合你的

$x={info:{apiVersion:1.1,clientFeatures:[all],客户端时间:2014-11-27T23:04:27.542Z,情绪:[],输入:谁+创建+你,isNewUser:true,地区:en,位置:53.0%2C9.0,登录:mashape,响应时间:948},输出:[{操作:{自定义:{},说:{文本:我是由Pannous的酷家伙创建的。},实体:{dialoguesInfo{对话:沙箱,对话id:63,强制:false,主动:false,匹配id:205233,匹配分数:3.77,响应id:205224},输入:谁+创建+你,区域设置:en},响应时间:673,结果:{}};

然后进行json_解码和var_转储以查看输出

var_dumpjson_解码$x

结果:

stdclass12类{ 公共$info=> stdClass2类10{ 公共$apiVersion=> 第3.1.1条 public$clientFeatures=> 阵列1{ [0] => string3全部 } public$clientTime=> string24 2014-11-27T23:04:27.542Z 公众情绪=> 阵列0{ } 公共$input=> 是谁创造了你 public$isNewUser=> 布尔图 公共$locale=> string2 en 公共$location=> string10 53.0%2C9.0 公共$login=> string7 mashape 公共$responseTime=> int948 } 公共$output=> 阵列1{ [0] => stdClass3类4{ 公共行动=> 类别stdClass4 2{ ... } 公共$entities=> stdClass7类3{ ... } 公共$responseTime=> int673 公共$results=> 类stdClass9 0{ ... } } } }

正如您所看到的,json_decode工作得很好。对于完整的数据摘要,而不是var_dump,请完全按照上面的方法执行,但使用print_r

记住,如果要将解码后的数据作为数组,请使用json_decode$yourData,true

从这里开始,现在应该非常清楚如何访问您想要的数据。如果没有,不用担心,解决方案很接近,只需写一篇评论,说明哪些部分让您感到困惑

扰流器

我在这里为您添加了这个小片段 基本上,0偏移量会给你带来困难

$foo=json_解码$x,TRUE; var_dump$foo['output'][0]['actions'];

json_decode是你的朋友。然后学习如何正确使用它。如果它不起作用,你的数据就会被破坏。不要粗鲁,用json_decode结果更新你的问题。同时检查它的内容是否传递true作为第二个参数,这将把它转换为数组而不是stdClass实例。@JefferyGintoki谈到粗鲁我认为是粗鲁的原因之一这里的st是说,如果没有更多的细节/错误消息/等等,它就无法工作。好吧,正如你可以看到json_解码返回很多stdClass一样,我使用了我在CMS中使用的一个函数,将stdClass转换为一个简单的数组,但是在这个json_解码结果中,它返回了很多stdClass,我无法继续调用我的函数eve为了简化这个对象,我试着看看是否有人能轻松地完成它,谢谢。如果我当时很匆忙,问错了问题,我想呼应一下说的结果,有很多stdClass无法进入其中。@jefferyintoki对我来说没问题。我知道有什么困扰你,那就是索引0。我会在答案中添加一个破坏者。等一下…补充道。如果你认为有意义,请告诉我。另外,编辑你的问题,如果你因为匆忙而以错误的方式发布,这可能会将一些反对票转为赞成票。谢谢你,你是唯一一个理解得很好的人,thx bro:没问题。如果你编辑你的问题,这样更适合,真正的问题是访问$x->output->0->actions as->0->不起作用。我相信人们会取消一些反对票。没问题,最后一件事,如果可能的话,删除那些看起来粗鲁的评论。这可能会起到最后的作用