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
相关产品推荐
相关产品推荐

