3

我在 Oracle RightNow CRM 中使用 PHP 处理 JSON 数据时遇到问题。示例 json 包含在下面。当我尝试检查 if 条件时,“person.private_email”属性中包含的数据,只有在有一些数据时才会评估为真。如果该属性没有数据,它什么也不做。我根本没有收到任何错误。检查任何属性是否不包含数据的最佳方法是什么。

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

要检查它是否为空isset(),检查它是否为空就足够了,你最好使用字符串,因为它删除了空格,如果你用函数trim()检查空,空格被计为字符。empty()

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

我认为您不能同时检查(&&),因为 isset() 将检查 PERSON.PRIVATE_EMAIL 是否在 JSON 数据中设置,否则如果它只是空白,那么 empty() 就足够了。

也许应该把它分解成这样的东西:

$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

要检查对象中是否存在属性,您可以使用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

在您的示例代码中,您将 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 回答