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

PHP json_encode输出值转字符串后Angular JSON.parse如何正确解析取值

问题解决方法

方案1:PHP端从源头修正类型 (推荐)

json_encode()会严格保留PHP变量本身的类型,输出的数字、布尔值为字符串格式,说明传入json_encode()的PHP数组/对象中,data、state字段本身就是字符串类型,可通过两种方式修复:

  • 输出前手动强制转换对应字段类型
// 假设原始业务数据存储在$res变量中
$res['data'] = (int)$res['data'];
$res['state'] = (bool)$res['state'];
echo json_encode($res);
  • 调用json_encode()时添加JSON_NUMERIC_CHECK参数,自动将数字格式的字符串转为数值类型,布尔类型仍需要手动转换
echo json_encode($res, JSON_NUMERIC_CHECK);

注意:如果state字段存储的是字符串格式的"true"/"false",无法通过参数自动转换,必须手动转为布尔类型后再执行json_encode()。

方案2:Angular端解析时修正 (仅适用于无法修改后端代码的场景)

可以给JSON.parse()传入第二个reviver回调参数,自定义字段的类型转换逻辑:

const rawJson = '{"data":"2","state":"false"}';
const parsedData = JSON.parse(rawJson, (key, value) => {
  // 处理data字段转为数字类型
  if (key === 'data') {
    return Number(value);
  }
  // 处理state字段转为布尔类型
  if (key === 'state') {
    return value === 'true';
  }
  return value;
});

如果是通过Angular HttpClient发起的请求,可以在请求管道中添加转换逻辑:

this.http.get('/your/api/path', {responseType: 'text'})
  .pipe(
    map(rawStr => JSON.parse(rawStr, (key, value) => {
      if (key === 'data') return Number(value);
      if (key === 'state') return value === 'true';
      return value;
    }))
  )
  .subscribe(result => {
    // 此处拿到的result就是符合类型要求的结果
  })

内容的提问来源于stack exchange,提问作者Luis Bermúdez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:06:03