自社のヒント&ナレッジ共有

吉田成一
参加者

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

お世話になっております。

LIG吉田です。

 

英語サイトにおいても「Invalid input JSON」について記事の存在は確認しました。

しかし、PHPのコードについての記事については見つけられず。

ご助力をお願いしたいです。

 

ご質問内容は以下のスクショの通りで、PHPコードが通らないのはなぜか?になります。

 

_0-1659328746733.png

 

よろしくお願いします。

0 いいね!
2件の承認済みベストアンサー
assi
解決策
ガイド役

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

@吉田成一 

前提として、API ドキュメント内のAPIを実行できる箇所はあまり信用しない方が多いです。バグが多く、またAPI自体のアップデートに追いついていないことも多いので……。(現にまだ非公開アプリに対応できていません)

 

本題ですが、上記コメントの

 

> エラーを次のように回避(ググった記事を参考にしました)

 

のコードを確認しました。ざっと見るに、sortの書き方が違うように思います。

 

一度削除してみるか、もしくは下記の形式で記述してみるといかがでしょうか?

"sorts": [
  {
    "propertyName": "createdate",
    "direction": "DESCENDING"
  }
]

searchエンドポイントの書式については、下記のドキュメントページが詳しいです。

https://developers.hubspot.com/docs/api/crm/search

 

余談ですが、私がAPIを試す際はドキュメントを見つつ、Postmanにてリクエストボディを書いてテストすることが多いです。使いこなせばかなり便利で、APIドキュメント上での実行よりもお勧めです。

元の投稿で解決策を見る

KMurota
解決策
トップ投稿者

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

@assi @吉田成一 

  1. "sorts":["email"] でもリクエストは通ります(タイプミスがあっても通りますが)。デフォルトではASCENDINGなので、

 

 

"direction"

 

はDESCENDINGにしたい場合に利用するイメージだと思っています。

 

  • すでにご覧になっていると思いますが、海外CommunityでもPHPライブラリのエラーが報告されていますね。PHPは全く知らないのですが、[]のCollectionとArrayの区別がライブラリがうまくつけられていないようです。解決策も結局「curlのwrapperを使った」というのが最終的なようです。
    https://community.hubspot.com/t5/APIs-Integrations/Api-search-contact-by-email-in-php-invalid-json/t...
    https://community.hubspot.com/t5/APIs-Integrations/Problem-with-API-contacts-search-using-php-client...
    コミュニティの報告にも関わらず放置されているところを見ると、ライブラリを諦めて、httpクライアントを使用した方がいい気がします。

    ちなみに、curlとPythonでは、「空プロパティが時々入り込む」という以外は今のところバグに当たったことはないので、JavaScriptとPythonの方が力が入っているのでしょうか??と勘ぐってしまいます。

  • もしSearchの値がテストでemailにしているだけでなく本当にemailなのであれば、V1で

    Get a contact by email address

    というエンドポイントがあります。
    https://legacydocs.hubspot.com/docs/methods/contacts/get_contact_by_email
    SearchのRate Limitは4 Req/Secなので、こちらの方がお勧めです。

  • 余談ですが、VS Codeお使いであれば、Thunder Client Rapid API Clientというaddonがいいですよ!

    - PostManのようにリクエストを設定でき、
    - PostManのWorkspace=>新しいタブを開く=>TEXT->Raw->JSONを選択
    というのが若干邪魔くさかったのが省略され
    - リクエストを各言語に変換できます。
    過去のリクエスト履歴も勝手に残していってくれるので再利用しやすいです。


Kan Murota | Founder of Hyper Automation Design Studio
logo

元の投稿で解決策を見る

8件の返信
natsumimori
コミュニティーマネージャー
コミュニティーマネージャー

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

@assiさん @KMurota さん

ナレッジシェアありがとうございます〜!私はAPIはさっぱりなので、、このようなナレッジをコミュニティーで共有いただけるの助かります><

@吉田成一 さんもこちらの投稿ありがとうございます。このような開発関連のリソースが増えるのありがたいです!

吉田成一
参加者

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

参考程度でお伺いしますが、日本国内の社員さんエンジニアの方は、

本コミュニティご覧になっていないのでしょうかね・・・

 

0 いいね!
natsumimori
コミュニティーマネージャー
コミュニティーマネージャー

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

@吉田成一 さん

はい、HubSpotの社員もコミュニティー投稿を拝見しておりますが、今回のようにご質問内容に知見の深いコミュニティーメンバーの方が回答をしてくださる例も多くございます。ぜひ今後もHubSpotコミュニティーをご利用ください^^

吉田成一
参加者

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

皆様

 

色々と情報ありがとうございました。

curlを叩くようにしました・・・(いいのかな・・・)

 

        $url = 'https://api.hubapi.com/crm/v3/objects/contacts/search';

        $headers = array();
        $headers[] = 'Content-Type: application/json';
        $headers[] = 'authorization: Bearer pat-na1-xxxxxxxx';
        $payload = '{"filterGroups": [{"filters": [{"value": ';
        $payload .= '"' . $email . '"';
        $payload .= ',"propertyName": "email","operator": "EQ"}]}],"properties": ["email"]}';

        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = json_decode(curl_exec($ch));
        curl_close($ch);

 

HubSpot大変だなぁ・・・

 

KMurota
トップ投稿者

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

空配列の"values"=[]がフィルターに入ってしまっています。
テスター、たまに入力していないパラメータが空で入り込んでしまいます。

下記、成功SearchリクエストBodyの一例です。

 "filterGroups": [
            {
                "filters": [
                    {
                        "value": "true",
                        "operator": "EQ",
                        "propertyName": "support_service_subscribed_customer"
                    }
                ]
            }
        ]

 



Kan Murota | Founder of Hyper Automation Design Studio
logo
吉田成一
参加者

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

室田様

 

ご連絡ありがとうございます。

ご指摘箇所に問題があるのはわかりつつ・・・投稿した次第です。

 

https://developers.hubspot.com/docs/api/crm/contacts#endpoint?spec=POST-/crm/v3/objects/contacts/sea...

 

上記のWebページでAPIを試せるのですが、「"values"=[] 」を、

同画面から消せないのはなぜだろう?というのが一つあります。

 

また上記ページ上で、「PHP」を選択し「Copy All」をし、

自Laravelプロジェクト内にペースト(use xxx等々調整しますが)後、

さらに「"values"=[] 」は取り除いた状態ですと、vscodeになりますが、

文法エラーが発生するようです。

 

use HubSpot\Factory;
use HubSpot\Client\Crm\Contacts\ApiException;

。。。

$client = Factory::createWithAccessToken("pat-na1-2bf25c1d-2f5d-4103-af29-xxxxxxxx");

$PublicObjectSearchRequest = new PublicObjectSearchRequest(['filter_groups' => [{"filters":[{"value":"seiichi115@gmail.com","propertyName":"email","operator":"EQ"}]}], 'sorts' => ["email"], 'properties' => ["email"], 'limit' => 1, 'after' => 0]);
try {
$apiResponse = $client->crm()->contacts()->searchApi()->doSearch($PublicObjectSearchRequest);
var_dump($apiResponse);
} catch (ApiException $e) {
echo "Exception when calling search_api->do_search: ", $e->getMessage();
}

 

エラーを次のように回避(ググった記事を参考にしました)

 

        $client = \HubSpot\Factory::createWithAccessToken("pat-na1-2bf25c1d-2f5d-4103-af29-9938eefa632c");

        $filters = array(
            'filters' => array(
                array(
                    'value' => 'seiichi115@gmail.com',
                    'propertyName' => 'email',
                    'operator' => 'EQ',
                ),
            ),
        );

        $PublicObjectSearchRequest = new PublicObjectSearchRequest(
            [
                'filter_groups' => json_encode($filters),
                'sorts' => ["email"],
                'properties' => ["email"],
                'limit' => 1
            ]
        );

        try {
            $apiResponse = $client->crm()->contacts()->searchApi()->doSearch($PublicObjectSearchRequest);
            var_dump($apiResponse);
        } catch (ApiException $e) {
            echo "Exception when calling search_api->do_search: ", $e->getMessage();
        }

上記コードを実行すると・・・
 
Exception when calling search_api->do_search: [400] Client error: `POST https://api.hubapi.com/crm/v3/objects/contacts/search` resulted in a `400 Bad Request` response: {"status":"error","message":"Invalid input JSON on line 1, column 17: Cannot deserialize value of type `java.util.HashSe (truncated...)

 

うーん・・・

 

という状態です。

json形式が良くないっぽいのですが、そもそもの「Copy All」コードが動かないのはなぜなのか?

 

という状態です。

 

何かアドバイスありましたら、よろしくお願いします。

assi
解決策
ガイド役

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

@吉田成一 

前提として、API ドキュメント内のAPIを実行できる箇所はあまり信用しない方が多いです。バグが多く、またAPI自体のアップデートに追いついていないことも多いので……。(現にまだ非公開アプリに対応できていません)

 

本題ですが、上記コメントの

 

> エラーを次のように回避(ググった記事を参考にしました)

 

のコードを確認しました。ざっと見るに、sortの書き方が違うように思います。

 

一度削除してみるか、もしくは下記の形式で記述してみるといかがでしょうか?

"sorts": [
  {
    "propertyName": "createdate",
    "direction": "DESCENDING"
  }
]

searchエンドポイントの書式については、下記のドキュメントページが詳しいです。

https://developers.hubspot.com/docs/api/crm/search

 

余談ですが、私がAPIを試す際はドキュメントを見つつ、Postmanにてリクエストボディを書いてテストすることが多いです。使いこなせばかなり便利で、APIドキュメント上での実行よりもお勧めです。

KMurota
解決策
トップ投稿者

/crm/v3/objects/contacts/searchにてInvalid input JSON発生

解決

@assi @吉田成一 

  1. "sorts":["email"] でもリクエストは通ります(タイプミスがあっても通りますが)。デフォルトではASCENDINGなので、

 

 

"direction"

 

はDESCENDINGにしたい場合に利用するイメージだと思っています。

 

  • すでにご覧になっていると思いますが、海外CommunityでもPHPライブラリのエラーが報告されていますね。PHPは全く知らないのですが、[]のCollectionとArrayの区別がライブラリがうまくつけられていないようです。解決策も結局「curlのwrapperを使った」というのが最終的なようです。
    https://community.hubspot.com/t5/APIs-Integrations/Api-search-contact-by-email-in-php-invalid-json/t...
    https://community.hubspot.com/t5/APIs-Integrations/Problem-with-API-contacts-search-using-php-client...
    コミュニティの報告にも関わらず放置されているところを見ると、ライブラリを諦めて、httpクライアントを使用した方がいい気がします。

    ちなみに、curlとPythonでは、「空プロパティが時々入り込む」という以外は今のところバグに当たったことはないので、JavaScriptとPythonの方が力が入っているのでしょうか??と勘ぐってしまいます。

  • もしSearchの値がテストでemailにしているだけでなく本当にemailなのであれば、V1で

    Get a contact by email address

    というエンドポイントがあります。
    https://legacydocs.hubspot.com/docs/methods/contacts/get_contact_by_email
    SearchのRate Limitは4 Req/Secなので、こちらの方がお勧めです。

  • 余談ですが、VS Codeお使いであれば、Thunder Client Rapid API Clientというaddonがいいですよ!

    - PostManのようにリクエストを設定でき、
    - PostManのWorkspace=>新しいタブを開く=>TEXT->Raw->JSONを選択
    というのが若干邪魔くさかったのが省略され
    - リクエストを各言語に変換できます。
    過去のリクエスト履歴も勝手に残していってくれるので再利用しやすいです。


Kan Murota | Founder of Hyper Automation Design Studio
logo