json_encode及JSON.parse报错Unexpected token in JSON at position

2019-01-25 JavaScript 1653

问题描述

  • 场景

后端php,json_encode数据返回给前端,
前端通过JSON.parse处理为json对象
JSON.parse('<?php echo json_encode($json,JSON_FORCE_OBJECT|JSON_UNESCAPED_UNICODE); ?>')
  • 报错

Unexpected token in JSON at position

排查方法

  • 浏览器F12调出控制台,将php返回的字符串复制过来

  • 一次一次的删除正常字符串,执行,最终找到报错点

  • 后端PHP或者前端,处理掉报错特殊字符

JSON解析报错

目前遇到的几个特殊字符如下

  • ':单引号

  • \n:换行符字符串

  • \":双引号字符串

  • ``:反斜杠字符串

处理方法

  • ':增加JSON_HEX_APOS参数,将单引号转换为unicode编码。

json_encode($json,JSON_FORCE_OBJECT|JSON_UNESCAPED_UNICODE|JSON_HEX_APOS)
  • ``:在JSON.parse参数内需要将反斜杠转义。

$json = str_replace('\&#x27;,'\\\\',$json);

后端通过以上两个修改,基本可以解决报错问题。

0