PHP中带string(100)前缀的JSON字符串如何转为常规字符串?
搞定带
string(xxx)前缀的JSON解析问题 嘿,这个场景我太熟悉了!你看到的string(100) "{"data":{"type":"campaign-folders","id":"d208f3171a","attributes":{"name":"My Folder"}}}",其实是PHP里var_dump()函数的输出格式——它会先显示变量的类型(string)、长度(100),再输出实际的字符串内容。
分两种情况来处理:
情况1:只是查看输出带前缀,实际变量本身就是JSON字符串
如果你的变量本身已经是纯JSON字符串,只是用var_dump()查看时才显示这个前缀,那直接用json_decode()解析就行:
// 假设你的变量是$jsonVar $data = json_decode($jsonVar, true); // true表示转成关联数组,不加则是对象 print_r($data);
情况2:变量实际内容就包含string(xxx) "..."前缀
如果你的变量真的把string(100)和前后引号都包含进去了,那得先把中间的JSON内容提取出来,给你两个靠谱的方法:
方法1:简单字符串截取
利用固定格式的特点,找到第一个双引号的位置,截取到末尾的前一个字符(去掉最后一个引号):
$rawString = 'string(100) "{"data":{"type":"campaign-folders","id":"d208f3171a","attributes":{"name":"My Folder"}}}"'; // 定位第一个双引号,然后截取后面的内容到倒数第二位 $jsonString = substr($rawString, strpos($rawString, '"') + 1, -1); // 解析JSON $data = json_decode($jsonString, true); print_r($data);
方法2:正则表达式提取(更灵活)
如果前缀里的数字可能变化,用正则匹配更稳妥,不管长度是多少都能精准提取中间的JSON:
$rawString = 'string(100) "{"data":{"type":"campaign-folders","id":"d208f3171a","attributes":{"name":"My Folder"}}}"'; // 匹配开头的string(数字) 双引号,然后捕获中间的所有内容 preg_match('/^string\(\d+\) "(.*)"$/', $rawString, $matches); if (isset($matches[1])) { $jsonString = $matches[1]; $data = json_decode($jsonString, true); print_r($data); }
小提醒
如果JSON内容里本身包含转义的双引号(比如"name":"He said \"Hello\""),要确保原始字符串的转义是正确的,不然截取或正则可能会出错哦!
内容的提问来源于stack exchange,提问作者Rafi Ramadhan
相关产品推荐
相关产品推荐

