如何从Zoho CRM API中提取JSON响应中的数据

时间:2016-12-18 22:48:19

标签: php json

我正在使用Zoho CRM。我从他们的API获得的响应格式对我来说似乎有点奇怪;我不能像往常一样从中拉出一个物体。我试图使用PHP解析结果。以下是他们的回复格式示例:

{
    "response": {
        "result": {
            "SalesOrders": {
                "row": {
                    "FL": [
                        {
                            "content": "6666666000000000000",
                            "val": "SALESORDERID"
                        },
                        {
                            "content": "Order",
                            "val": "Subject"
                        },
                        {
                            "content": "Pending",
                            "val": "Status"
                        },
                        {
                            "content": "John Smith",
                            "val": "Order Owner"
                        },
                        {
                            "content": "Canada",
                            "val": "Billing Country"
                        },
                        {
                            "product": {
                                "FL": [
                                    {
                                        "content": "5555555000000000000",
                                        "val": "Product Id"
                                    },
                                    {
                                        "content": "Roller Coaster",
                                        "val": "Product Name"
                                    }
                                ],
                                "no": "1"
                            },
                            "val": "Product Details"
                        },
                            "content": "Pending",
                            "val": "Ticket Status"
                        }
                    ],
                    "no": "1"
                }
            }
        },
        "uri": "/crm/private/json/SalesOrders/getRecordById"
    }
}

我尝试做的是获取产品的产品ID(在这种情况下,值为" 5555555000000000000"。

每个响应都具有相同的结构,但是我无法使用索引来解析键/值,因为API调用之间的字段数量可能会发生变化(意味着产品的索引可能是5,如上所述,或7或8,或其他任何取决于被拉入的字段数量)。我不明白为什么他们没有使用典型的键/值对,例如" Product_ID":" 5555555000000000000"这将使所有这一切都成为无问题。

有没有办法在不迭代每个键/值对寻找" val" "产品ID"然后抓住相关的内容" (这是我正在寻找的产品ID)?这是我能想到的唯一方式,而且看起来效率不高。

3 个答案:

答案 0 :(得分:1)

PHP有一个函数:json_decode。见http://php.net/manual/en/function.json-decode.php

$response = "... your JSON response from wherever ...";
$data = json_decode($response, true);

// Access the nested arrays any way you need to, such as ...
$orders = $data["response"]["result"]["SalesOrders"];
foreach ($orders["row"]["FL"] as $item) {
    if (array_key_exists("product", $item) {
        echo  $item["product"]["FL"][0]["content"];
    }
}

编辑:将第二个arg更正为json_decode(感谢Marcin)

答案 1 :(得分:0)

  

我不明白他们为什么不使用典型的键/值对,例如“Product_ID”:“5555555000000000000”会使所有这些都成为非问题。

  • 是的,可能有一个key =>值对,但这很容易。
  • 因为Zoho ......;)
  

有没有办法做到这一点,而不是遍历每个键/值对寻找“产品ID”的“val”,然后抓取相关的“内容”(这是我正在寻找的产品ID)?

不,(即使您使用json_decode($data, true)将其转换为数组并使用命名键继续),您最终会迭代或测试密钥存在(需要到产品-FL-val来获取产品) -FL-内容)。也许带回调的array_fiterarray_walk可以解决问题,但它们也会在内部进行迭代。

我的建议是安全一段时间并使用现有的套餐,例如

https://github.com/cristianpontes/zoho-crm-client-php

或在Packagist https://packagist.org/search/?q=zoho

上搜索一个

答案 2 :(得分:0)

我不知道这可能有所帮助。但这就是我用于 Zoho APP 的内容。实际上我正在使用 Zoho 开发一个PHP应用程序。你的JSON和我的JSON是一样的,但是我正在获得优惠,而你正在获得SalesORders。

<?php 
$token = $_SESSION['token'];
$url = "https://crm.zoho.com/crm/private/json/Deals/getRecordById?authtoken=$token&scope=crmapi&id=$dealID";
$result = file_get_contents($url);
$deal_detail = json_decode($result);
$deal_detail = json_decode(json_encode($deal_detail), True);

$deal_detail_array = array();
//Instead of Deals you have SalesOrder right
foreach($deal_detail['response']['result']['Deals']['row']['FL'] as $array){
    $deal_detail_array[$array['val']] = $array['content'];
}

echo $deal_detail_array['DEALID'];  // You can change this to SALEORDERID, get data correctly every time.
echo $deal_detail_array['Deal Name'];
echo $deal_detail_array['Amount'];
///.......and so on ..............//
//................................//

只有你的JSON和我之间的区别是:你在结果字段后的JSON中有“ SalesOrders ”而在我的json而不是SalesOrders中我有在那里交易


这段代码对我来说很好。所以你可以做同样的事情,除了现场更新。我为每个请求正确获取 DEALID ,同样可以为您提供 SALESORDERID