You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:05:14