我在Oracle RightNow CRM中使用PHP操作JSON数据时遇到了问题。样本json包含在下面。当我尝试检入if条件时,“person.private_email”属性中包含的数据,只有在存在某些数据时才会计算为true。如果该属性没有数据,则不执行任何操作。我没有得到任何错误。 检查任何属性是否包含数据的最佳方法是什么。
{
"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": ""
}
self::$person=json_decode($json);
if (isset(self::$person->{'PERSON.PRIVATE_EMAIL'}) && !empty(self::$person->{'PERSON.PRIVATE_EMAIL'}))
答案 0 :(得分:1)
要检查它是否为空,isset()
就足够了,为了检查它是否为空,你最好trim()
字符串,因为它删除空格和空格被计为字符如果你使用empty()
函数检查空虚。
$email = self::$person->{'PERSON.PRIVATE_EMAIL'};
if (isset($email) && trim($email) != '')
echo "Contains data";
答案 1 :(得分:0)
我认为您无法同时检查(&&),因为isset()将检查是否在JSON数据中设置了PERSON.PRIVATE_EMAIL,否则如果它只是空白,那么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
}
答案 2 :(得分: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
}
答案 3 :(得分:0)
在您的示例代码中,您正在将json字符串解析为本地$ person变量,而在您的条件中,您正在检查$ person的静态类属性....
即,$ person与self :: $ person不同。除非你有更多的代码没有共享,否则这可能是你的问题。
此代码适用于RightNow CX w / CP2。
$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";
}