【问题标题】:How can I check if the data is coming in is string delimited or JSON?如何检查传入的数据是字符串分隔的还是 JSON 格式?
【发布时间】:2012-01-11 22:51:54
【问题描述】:

假设我有一个变量 $data['media']; 问题是数据可能看起来像一个字符串,例如

$data['media'] = '1|BlahBLah2|0' 

或者它可能以 json 编码字符串的形式出现,例如

$data['media'] = '{"site_id":"1","string":"BlahBlah2","cool":"0"}';

区分是分隔字符串还是 json 编码字符串的最佳方法是什么?

【问题讨论】:

  • 分隔字符串是否会以{[ 开头?
  • json_decode(),捕获错误(即返回 NULL)...如果有错误,则它是一个字符串...只有当 JSON 实际上是 NULL 时才有问题
  • 有没有办法让你的程序具有确定性,即,让你知道期望哪种格式?

标签: php json delimiter


【解决方案1】:

json_decode 将返回解码数据或 NULL 如果它不是 json 数据,所以你可以使用这样的东西:

$decode = json_decode($data['media']);

if ($decode)
{
    // the data was json encoded, so now we can process it
    $data['media'] = $decode;
}
else // data is a string

【讨论】:

  • 这对于 falsetruenull 的 JSON 值将失败,它们作为字符串发送,没有大括号。 (当然,最终结果是否有任何不同将取决于脚本如何处理数据,但NULL!="NULL"。)
【解决方案2】:
if( json_decode( $data['media'] )!==NULL || strtolower( $data['media'] )=='null' )
{
  $data['media'] = json_decode( $data['media'] );
}
else
{
  # Not a JSON string
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    相关资源
    最近更新 更多