首页 > 解决方案 > 为什么 json_decode 函数不能解码这个 json 字符串?

问题描述

我想对存储在我的数据库中的字符串进行 json_decode。原始字符串是:

"[{\"drug_id\":\"2\",\"shop_id\":\"1\",\"drug_code\":\"HN0090840\",\"drug_name\":\"\\u5934\\u5b62\\u80f6\\u56ca\",\"manufacturer\":\"\\u4e0a\\u6d77\",\"drug_category_id\":\"3\",\"secondary_category_id\":\"5\",\"drug_type\":\"1\",\"drug_spec\":\"10M\",\"drug_unit_id\":\"6\",\"buy_price\":\"10.90\",\"retail_price\":\"30.03\",\"drug_image\":\"http:\\/\\/doctor-service.oss-cn-beijing.aliyuncs.com\\/img_161423936637.png\",\"banner_image\":\"[\\\"http:\\/\\/doctor-service.oss-cn-beijing.aliyuncs.com\\/img_161423936637.png\\\",\\\"http:\\/\\/doctor-service.oss-cn-beijing.aliyuncs.com\\/img_161423937074.png\\\"]\",\"drug_intro\":\"\",\"drug_details\":\"\\u4e00\\u9897\\u63d0\\u795e\\u9192\\u8111\",\"status\":\"1\",\"is_deleted\":\"0\",\"drug_category_name\":\"\\u63d0\\u795e\\u9192\\u8111\",\"secondary_category_name\":\"\\u6297\\u751f\\u7d20B\",\"drug_unit_name\":\"\",\"drug_type_name\":\"Rx\",\"usage_dosage\":\"\\u53e3\\u670d,1\\u65f61\\u6b21,\\u4e00\\u6b211\\u7247,\\u7528\\u836f1\\u5929\",\"usage_dosage_param\":\"\\u53e3\\u670d,1,\\u65f6,1,1,\\u7247,1,1\",\"quantity\":1}]"

但是当我使用 json_decode 函数来解码这个字符串时,它不起作用:

$drug_list = json_decode(trim($string),true);

所以我认为这个json字符串中可能有反斜杠,所以我使用stripslashes函数去除所有反斜杠:

$drug_list = json_decode(trim(stripcslashes($string)),true);

它什么也不返回。所以我想可能是编码问题,所以我打印了这个长json的编码:

print_r(mb_detect_encoding($string));

它打印“ASCII”,然后我尝试将编码转换为 utf-8:

$string = iconv("ASCII", "UTF-8", $string);

然后我打印iconv的返回值的编码,还是“ASCII”,比较混乱。

然后我尝试了另一个转换编码功能,它仍然不起作用:

mb_convert_encoding($string, 'UTF-8', "ASCII");

我真的很困惑,现在找不到解决这个问题的方法,任何帮助或信息将不胜感激。

标签: phpencode

解决方案


推荐阅读