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

如何用TypeScript/JS将PHP数组格式的API响应转为JSON

解决方案:将PHP数组格式响应转为JSON(TS/JS)

方法一:手动字符串解析(无依赖)

如果不想引入第三方库,可以自己写一个简单的解析函数处理常见的PHP数组格式,核心是通过字符串替换和递归处理嵌套结构:

function parsePhpArray(str) {
  // 移除开头的Array标识和外层括号
  str = str.trim().replace(/^Array\s*\((.*)\)$/s, '$1');
  
  let nestedCount = 0;
  let tempStr = '';
  const nestedArrays = [];

  // 先提取嵌套的Array结构并递归解析
  for (let i = 0; i < str.length; i++) {
    const char = str[i];
    // 匹配到嵌套Array的起始
    if (str.slice(i-5, i) === 'Array' && char === '(') {
      nestedCount++;
      tempStr += `__NESTED_${nestedArrays.length}__`;
      nestedArrays.push('');
      i += 6; // 跳过"Array("
      continue;
    }
    // 匹配到嵌套Array的结束
    if (char === ')' && nestedCount > 0) {
      nestedCount--;
      // 递归解析当前嵌套数组
      const nestedResult = parsePhpArray(`Array(${nestedArrays.pop().trim()})`);
      nestedArrays.push(JSON.stringify(nestedResult));
      continue;
    }
    // 收集嵌套数组的内容
    if (nestedCount > 0) {
      nestedArrays[nestedArrays.length - 1] += char;
    } else {
      tempStr += char;
    }
  }

  // 替换嵌套数组的临时标记
  tempStr = tempStr.replace(/__NESTED_(\d+)__/g, (_, idx) => nestedArrays[idx]);
  
  // 转换[key] => value为JSON键值对格式
  tempStr = tempStr.replace(/\[([^\]]+)\] => (\S+)/g, '"$1": "$2"');
  
  // 清理多余换行和逗号,补全JSON大括号
  tempStr = tempStr.trim()
    .replace(/\s+/g, ' ')
    .replace(/,\s*,/g, ',')
    .replace(/,$/, '');

  return JSON.parse(`{${tempStr}}`);
}

// 测试使用
const phpResponse = `Array
(
    [hittype] => singlehit
    [singlehit] => Array
        (
        )
)`;

const jsonObj = parsePhpArray(phpResponse);
console.log(JSON.stringify(jsonObj));

注意:这个方法只适用于结构简单的PHP数组,如果遇到带特殊字符(如空格、引号)的键值,需要额外调整正则表达式。

方法二:使用第三方库(更稳定)

用成熟的npm库php-array-parser来处理,它能覆盖更多边缘情况:

  1. 安装依赖:
npm install php-array-parser --save
  1. 在TS/JS中使用:
import { parse } from 'php-array-parser';

const phpResponse = `Array
(
    [hittype] => singlehit
    [singlehit] => Array
        (
        )
)`;

// 解析为JS对象
const parsedObject = parse(phpResponse);
// 转为JSON字符串
const jsonString = JSON.stringify(parsedObject);

console.log(jsonString);

最优建议

如果可以联系API提供者,直接要求将响应格式改为JSON,这是最可靠的方案——PHP原生支持json_encode()函数,后端改动成本极低,能彻底避免解析PHP数组带来的潜在问题(比如复杂嵌套、特殊字符解析错误等)。

内容的提问来源于stack exchange,提问作者Agård

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:15:58