3

Oracle RightNow CRM で PHP を使用して JSON データを操作する際に問題が発生しています。サンプル json は以下に含まれています。if 条件、「person.private_email」属性に含まれるデータをチェックインしようとすると、データがある場合にのみ true と評価されます。その属性のデータがない場合は、何もしません。エラーはまったく発生しません。属性にデータが含まれていないかどうかを確認する最良の方法は何ですか。

JSON

{
    "PERSON.PERSON_ID": 272839,
    "PERSON.Surname": "FirstName",
    "PERSON.Given_Names": "LastName",
    "PERSON.TITLE": "MR",
    "PERSON.BIRTH_DT": "10/JUL/14",
    "PERSON.GENDER": "M",
    "PERSON.CDU_EMAIL": "S272839@mydomain.com",
    "PERSON.PRIVATE_EMAIL": ""
}

PHP

self::$person=json_decode($json);

if (isset(self::$person->{'PERSON.PRIVATE_EMAIL'}) && !empty(self::$person->{'PERSON.PRIVATE_EMAIL'}))
4

4 に答える 4

1

空かどうかは null かどうかをチェックするisset()だけで十分です。関数で空かどうかをチェックするtrim()と、スペースが削除され、スペースは文字としてカウントされるため、文字列の方が適切empty()です。

$email = self::$person->{'PERSON.PRIVATE_EMAIL'};
if (isset($email) && trim($email) != '')
    echo "Contains data";
于 2014-07-10T04:02:19.723 に答える
0

プロパティがオブジェクトに存在するかどうかを確認するには、次を使用できますproperty_exists()

if (property_exists(self::$person, 'PERSON.PRIVATE_EMAIL')) {
    // property exists
    $value = self::$person->{'PERSON.PRIVATE_EMAIL'};
}

trueプロパティが であっても、これは生成されることに注意してくださいnull。プロパティが存在するかどうか、およびそれがnullあなたのものではないことを確認するにはisset():

if (isset(self::$person->{'PERSON.PRIVATE_EMAIL'})) {
    // property exists and is not null
}

何かが空かどうかを確認するには、空の意味を定義するのが最善です。プロパティが文字列のみの場合、空の定義は次のようになります。

if (strlen(trim($value))) {
    // string contains at least on non-space
}
于 2014-07-10T04:40:26.813 に答える
0

isset() は PERSON.PRIVATE_EMAIL が JSON データに設定されているかどうかをチェックするため、両方のチェック (&&) を組み合わせることはできないと思います。

おそらく次のように分解する必要があります。

$email = "";

if (isset(self::$person->{'PERSON.PRIVATE_EMAIL'}))
{
   if(!empty(self::$person->{'PERSON.PRIVATE_EMAIL'}))
   {
       $email = self::$person->{'PERSON.PRIVATE_EMAIL'};
   }
else
{
   //email is not set in the json data
   //do something
}
于 2014-07-10T04:27:56.670 に答える
0

サンプル コードでは、json 文字列をローカルの $person 変数に解析していますが、条件では $person の静的クラス プロパティをチェックしています....

つまり、$person は self::$person と同じではありません。共有していないコードが他にない限り、これが問題になる可能性があります。

このコードは CP2 付きの RightNow CX で機能します。

    $json = '{
        "PERSON.PERSON_ID": 272839,
        "PERSON.Surname": "FirstName",
        "PERSON.Given_Names": "LastName",
        "PERSON.TITLE": "MR",
        "PERSON.BIRTH_DT": "10/JUL/14",
        "PERSON.GENDER": "M",
        "PERSON.CDU_EMAIL": "S272839@mydomain.com",
        "PERSON.PRIVATE_EMAIL": ""
    }';

    $person=json_decode($json);

    if(!empty($person->{'PERSON.PRIVATE_EMAIL'}))
    {
        echo "Not Empty";
    }
    else
    {
        echo "IS Empty";
    }
于 2014-07-10T22:29:18.640 に答える