首页 > 解决方案 > 需要时跟进[如何检查JSON对象是否为空或值] = true

问题描述

请原谅我提出问题的方式,但这是对我上一个问题的跟进如何检查 PHP [JSON] 中的值是否为空,我有 4 个答案,但我无法解决,请帮助我出去,试了三天什么都没有,

我在下面的 JSON 中有对象和值,我想要实现的很简单,可以说“payment_type”对象是空的,我想告诉用户它的空响应
payment_type 参数是必需的,如果它的值是空的,那就是“1”我用payment_type value is required回复,我想告诉用户,我的问题是

// api.php

public function create_insert_new_delivery()
{
    $payment_type = $this->validateParameter(
        'payment_type',
        $this->param['payment_type'],
        STRING,
        true
    );

    $date_of_delivery = $this->validateParameter(
        'date_of_delivery',
        $this->param['date_of_delivery'],
        STRING,
        true
    );

    $waybill_number = $this->validateParameter(
        'your_generated_waybill_number',
        $this->param['your_generated_waybill_number'],
        STRING,
        true
    );
}



{
    "name":"create_insert_new_delivery",
    "param":{
       "payment_type":"1",
       "date_of_delivery":"B",
       "your_generated_waybill_number":"39ei40909444567avaaaaba",
    }
}

我尝试过但效果不佳 从上一个问题中得到答案,它只显示此错误“ $this->throwError(EMPTY_PARAMETER, $fieldName . " value is required"); "

// rest.php

/**
 * @param string $fieldName e.g payment_type
 * @param mixed $value e.g 1
 * @param bool $required is equal to true for strings
 */
public function validateParameter($fieldName, $value, $required = true){
    if ($required AND empty($fieldName)) {
        $this->throwError(API_PARAM_REQUIRED, $fieldName . " parameter is missing");
    } elseif ($required AND empty($value)) {
        $this->throwError(EMPTY_PARAMETER, $fieldName . " value is required");
    } elseif (!empty($fieldName) AND empty($value) AND $required){
        $this->throwError(EMPTY_PARAMETER, $fieldName . " value is required");
    }
}

在邮递员调用 Image 的屏幕截图中,它的响应是值是空的,而不是字段名是空的。

标签: php

解决方案


如果我理解您的问题,则在读取数组中不存在的条目时需要小心。PHP 将触发警告/通知并传递一个空值,这可能不是您所期望的。这是我要使用的代码:

public function create_insert_new_delivery()
{
    $payment_type = $this->validateParameter(
        $this->param,
        'payment_type',
        STRING,
        true
    );

    $date_of_delivery = $this->validateParameter(
        $this->param,
        'date_of_delivery',
        STRING,
        true
    );

    $waybill_number = $this->validateParameter(
        $this->param,
        'your_generated_waybill_number',
        STRING,
        true
    );
}

public function validateParameter($params, $fieldName, $required = true)
{
    if ($required) {
        if (!array_key_exists($fieldName, $params)) {
            $this->throwError(API_PARAM_REQUIRED, "$fieldName parameter is missing");
        } elseif (empty($params[$fieldName])) {
            $this->throwError(EMPTY_PARAMETER, "$fieldName value is required");
        }
    }

    return $params[$fieldName];
}

我做了不同的事情:

  • 我没有传递值,而是传递了整个参数数组并在里面进行了检查
  • 我使用array_key_exists, 因为empty()当值为空时返回 true (并且您特别想检查密钥何时丢失)
  • 我简化了条件
  • 我已经返回了值(这是由函数的使用暗示的,但在原始代码中缺失)

推荐阅读