首页 > 解决方案 > 为什么必须对 JSON 字符串执行 preg_replace,以避免 json_decode 出现 null?

问题描述

我正在使用一个旧系统,它向我发送了一些 JSON。我被一个错误困住了一段时间,如果我使用它解析json_decode( $json_string, true);它然后返回null.

我在这里找到了解决方案,就是这样做:

json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json_string), true );

不过,我不明白为什么会这样。谷歌搜索这些字符告诉我,这是一些“不可读的字符”。但我不知道它们的用途是什么;他们为什么在那里。

而且......这让我怀疑,现在每次我解码 JSON 字符串时,使用这个系统,print_r必须确保解析的 JSON 不为空(因为 JSON 并不总是包含坏字符)。

更进一步,然后我可以阅读一些评论,在那里我找到了解决方案,应该小心删除这些字符。

我正在通过执行以下操作检索 JSON 字符串:file_get_contents( 'https://example.org/the-endpoint' );


所以这导致了三个问题:

  1. 如果我总是这样 json_decoded,我可能会遇到什么错误?
function improved_json_decode( $json_string ){
  return json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json_string), true );
}
  1. 为什么会发生这种情况?精灵添加角色还是发生了什么?

  2. 我应该(并且我可以)检查一个 JSON 字符串,如果它是“可解析的”吗?

标签: phpjson

解决方案


推荐阅读