PHP如何将含对象属性的字符串转换为关联数组?
将Java SDK返回的特殊格式字符串转为PHP关联数组
问题描述
我通过Java SDK获取到如下格式的字符串:
{confirmationReferenceId=126c023b-0031-4fec-9257-c31913355289, error=[], warning=[{code=1105, msg=Some Message, detail=[]}], success=true}
需要把它转换成PHP关联数组,以便通过如下方式访问元素:
$array['confirmationReferenceId'] $array['warning'][0]['msg']
解决方案
这个字符串是Java对象的toString()输出格式,并非标准JSON,我们需要先将其转换为合法的JSON格式,再用PHP的json_decode()解析成关联数组。具体实现代码如下:
// 原始Java返回字符串 $javaResponse = '{confirmationReferenceId=126c023b-0031-4fec-9257-c31913355289, error=[], warning=[{code=1105, msg=Some Message, detail=[]}], success=true}'; // 1. 给所有键名添加双引号,替换「键=」为「"键":」 $formatted = preg_replace('/(\w+)=/', '"$1":', $javaResponse); // 2. 给非数组、非布尔值的字符串值添加双引号 $formatted = preg_replace('/:([^\[\],}{]+)(?=[,\}\]])/', ':"$1"', $formatted); // 3. 将布尔值统一为JSON标准的小写格式(若返回的是TRUE/FALSE则需要此步骤) $formatted = str_replace([':TRUE', ':FALSE'], [':true', ':false'], $formatted); // 转换为PHP关联数组 $resultArray = json_decode($formatted, true); // 测试访问 echo $resultArray['confirmationReferenceId']; // 输出:126c023b-0031-4fec-9257-c31913355289 echo $resultArray['warning'][0]['msg']; // 输出:Some Message
代码说明
- 第一步正则
/(\w+)=/匹配所有单词格式的键名,替换为符合JSON规范的带双引号键格式。 - 第二步正则匹配键值对中既不是数组(
[])也不是布尔值的内容,给它们加上双引号,确保JSON格式合法。 - 第三步处理可能存在的大写布尔值(Java的
toString()可能输出TRUE/FALSE),转换为JSON标准的小写true/false。 - 最后用
json_decode($formatted, true)将JSON字符串解析为关联数组,第二个参数true指定返回数组而非对象。
内容的提问来源于stack exchange,提问作者rahim asgari
相关产品推荐
相关产品推荐

