2016-12-18 40 views
1

私はZoho CRMを使用しています。私がAPIから得た応答形式は私にとって少し奇妙なものです。私は普通にそうするのと同じように、それからオブジェクトを引き出すことはできません。 PHPを使用して結果を解析しようとしています。ここでは、フォーマットの応答の例を示します。私は何をしようとしているZoho CRM APIからJSON応答内のデータを抽出する方法

{ 
    "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" 
    } 
} 

は、この場合には値が「5555555000000000000」です(製品のプロダクトIDを取得している

すべての応答は同じを持っています構造体のインデックスを使用することはできませんが、キーの値を解析するためにインデックスを使用することはできません。フィールドの量はAPIコール(製品のインデックスが上記のように5、7,8など、実際には、「Product_ID」:「5555555000000000000」のような典型的なキーと値のペアを使用しなかった理由は分かりませんが、これはすべて問題ではありません。

"Product ID"の "val"を探して、関連付けられた "content"(これは私が探している製品IDです)を取得するすべてのキー/値ペアを反復せずにこれを行う方法はありますか?それが私が考えることができる唯一の方法であり、非常に効率的ではないようです。

答えて

1

PHPにはjson_decodeという関数があります。彼らは、このような "PRODUCT_ID" として、典型的なキー/値のペアを使用しなかった理由を私は理解していないjson_decodeに修正第2引数(感謝マルチン)

+0

あなたがそこに 'true'をを使用する必要がありますので、' json_decode() 'の2番目の引数が' bool'あるを得ることができる、ではありません 'JSON_OBJECT_AS_ARRAY'ていますオプション、したがって第4引数。 –

0

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"]; 
    } 
} 

EDITを参照してください " 5555555000000000000 "と表示され、これはすべて問題ではありません。

  • はい、キー=>値のペアがあるかもしれませんが、それは簡単になります。
  • ためのZoho ...;)

「関連するつかんその後、「プロダクトID」の「ヴァル」を探してすべてのキー/値のペアを反復処理とせずにこれを行う方法がありますコンテンツ "(これは私が探している製品IDです)?

いいえ、(あなたがjson_decode($data, true)を使用してアレイにこれをオンにし、名前のキーを使用して前に進む場合でも)あなたは(キーの存在のために反復またはテスト終わる製品 - を取得するには、製品-FL-ヴァルに取得する必要がありますFL-含有量)。コールバックを持つarray_fiterまたはarray_walkが救助されている可能性がありますが、内部的にも反復処理されます。


私の提案は、しばらく安全で、既存のパッケージを使用することです。

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

または私はこれが役立つかいない可能性があります知らないPackagist https://packagist.org/search/?q=zoho

0

上のものを検索します。しかし、これは私が私のために使用しているものですZoho APP。実際に私はZohoを使ってPHPアプリを開発しています。あなたの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

関連する問題