Php 将JSON层次结构读取到目标字段并循环遍历每个结果

Php 将JSON层次结构读取到目标字段并循环遍历每个结果,php,json,loops,hierarchy,Php,Json,Loops,Hierarchy,我正在使用Zoho CRM API查看联系人。我以JSON格式返回响应。这是我的密码: $token="03430403423mysecrettokenhere03403"; $url = "https://crm.zoho.com/crm/private/json/Leads/getRecords?"; $url .= "authtoken=".$token."&scope=crmapi"; $json = file_get_contents($url); $obj = json_de

我正在使用Zoho CRM API查看联系人。我以JSON格式返回响应。这是我的密码:

$token="03430403423mysecrettokenhere03403";
$url = "https://crm.zoho.com/crm/private/json/Leads/getRecords?";
$url .= "authtoken=".$token."&scope=crmapi";
$json = file_get_contents($url);
$obj = json_decode($json);
echo "<pre>";
print_r($obj);
echo "</pre>";

foreach ($obj as $testme) {
    $test = $obj->results[0]->Company;
    echo '<br><br>';
    echo "test: " . $test;
}
问题1:

我如何读取层次结构并将“公司”和“名字”“姓氏”等字段作为目标。我希望能够为每个联系人输出这些字段

foreach ($obj as $testme) {
    $test = $obj->results[0]->Company;
    echo '<br><br>';
    echo "test: " . $test;
}
这是我能做到的

问题2:

我目前有两个联系人在那里进行测试。我如何循环每一个

$cleanObj = $return->response->results->Leads->row;
foreach($obj作为$testme){
$test=$obj->results[0]->公司;
回音“

”; 回声测试:.$测试; }

上面的当前循环只返回一个对象。

好的,假设这些JSON返回数组总是以相同的方式返回,您可以这样做。首先,通过剥离所有包装垃圾来清理返回对象:

function getCompany($obj, $part) {
    $innerObj = $obj->FL;
    foreach ($innerObj as $c)  {
        if ($c['val'] == $part) {
            return $c['content'];
        }
    }
}
然后使用一个简单的函数循环每个触点的阵列:

$company = getCompany($cleanObj[0], "Company");
现在,您可以传入一个联系人和所需的部件

未经测试(主要是因为我不想复制数据转储),但这应该会从您的第一个联系人那里获取“Testttt”


至于第二个问题,您可以简单地通过
$cleanObj
数组循环访问您的所有联系人。不要执行
$cleanObj[0]
,而是执行
$cleanObj[1]
等操作

在您的问题中发布(部分)JSON响应。很多用户不喜欢点击未知的非网站链接。谢谢你的建议。仍然在学习如此的方法!我编辑了这篇文章以显示原始响应在这个JSON响应中公司在哪里?不确定它是如何被省略的。。。但我更新了回复以显示它。它的[3]。并且它只显示在第一个联系人objectCleary$obj->results[0]->公司不是正确的路径,但我不明白如何阅读层次结构@EatpeanutButter感谢您的帮助!但是,我收到了“为每个对象提供的参数无效”错误..
var_dump()
$innerObj和$obj,以确保路径正确。您需要的数据周围有很多层。它们可能需要调整。两个变量的NULL和NULL可能需要将$cleanObj更改为
$return->response->results->Leads->row
(固定大小写)当然也可以将
$return
更改为您所称的解码JSON
function getCompany($obj, $part) {
    $innerObj = $obj->FL;
    foreach ($innerObj as $c)  {
        if ($c['val'] == $part) {
            return $c['content'];
        }
    }
}
$company = getCompany($cleanObj[0], "Company");