JSONException: illegal identifier : \pos 1 异常报错问题

  • 1.常见情况:
    • 1.1 JSON 字符串格式不正确
    • 1.2 JSON 字符串中包含了非法字符
    • 1.3 解析 JSON 字符串的方式不正确
  • 2.解决办法:
    • 2.1 工具类
    • 2.2 StringEscapeUtils.unescapeJava
    • 3. JSONObject.parseObject(); 针对json异常
    • 4. Jackson
    • 5. 正则
    • 6. str.replace

1.常见情况:

1.1 JSON 字符串格式不正确

如果在解析 JSON 字符串时发现其格式不正确,例如缺少逗号分隔符、括号不匹配等问题,就会导致 “illegal identifier” 错误。你可以检查代码确保 JSON 字符串的格式正确。

1.2 JSON 字符串中包含了非法字符

如果在 JSON 字符串中包含了非法字符,例如反斜杠未转义、引号不成对等问题,就会导致 “illegal identifier” 错误。你可以使用 JSON 库提供的方法来将字符串转换为 JSON 对象或数组。

1.3 解析 JSON 字符串的方式不正确

如果在解析 JSON 字符串时使用了错误的方法或参数,就会导致 “illegal identifier” 错误。你可以检查代码并参考 JSON 库的文档来确定正确的解析方式和参数。

我这边的报错就是“/”未转义;

2.解决办法:

2.1 工具类

package com.example.去转移;public class StringEscapeUtils {public static String unescapeJava(String str) {if (str == null) {return null;}int sz = str.length();StringBuilder out = new StringBuilder(sz);StringBuilder unicode = new StringBuilder(4);boolean hadSlash = false;boolean inUnicode = false;for (int i = 0; i < sz; i++) {char ch = str.charAt(i);if (inUnicode) {unicode.append(ch);if (unicode.length() == 4) {try {int value = Integer.parseInt(unicode.toString(), 16);out.append((char) value);unicode.setLength(0);inUnicode = false;hadSlash = false;} catch (NumberFormatException nfe) {throw new IllegalArgumentException("Unable to parse unicode value: " + unicode, nfe);}}continue;}if (hadSlash) {hadSlash = false;switch (ch) {case '\\':out.append('\\');break;case '\'':out.append('\'');break;case '\"':out.append('"');break;case 'r':out.append('\r');break;case 'f':out.append('\f');break;case 't':out.append('\t');break;case 'n':out.append('\n');break;case 'b':out.append('\b');break;case 'u':inUnicode = true;break;default:out.append(ch);break;}continue;} else if (ch == '\\') {hadSlash = true;continue;}out.append(ch);}if (hadSlash) {out.append('\\');}return out.toString();}}

//调用方式

//调用方式public static void main(String[] args) {String str = "hello\\nworld";//  System.out.println("原数据"+str); //String unescapedStr = StringEscapeUtils.unescapeJava(str);System.out.println(unescapedStr); // 输出 hello\nworld   我这边直接换行了 因为\n 就是换行的意思}

2.2 StringEscapeUtils.unescapeJava

仓库地址:https://mvnrepository.com/artifact/org.apache.commons/commons-text

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text  -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-text</artifactId><version>1.9</version>
</dependency>
  public static void main(String[] args) {String str = "hello\\nworld";String unescapedStr = org.apache.commons.text.StringEscapeUtils.unescapeJava(str);System.out.println(unescapedStr); // 输出 hello\nworld   我这边直接换行了 因为\n 就是换行的意思}

3. JSONObject.parseObject(); 针对json异常

public static void main(String[] args) {String str = "{\"id\":\"\", \"projectId\":115798429401088, \"sceName\": \"417471\"}";JSONObject jsonObject=JSONObject.parseObject(str);System.out.println(jsonObject);}

4. Jackson

Jackson 库提供的 JsonNode 类来遍历 JSON 对象树,并对其中的字符串节点进行处理

注意jar的引用

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;public class JsonUtils {private static final ObjectMapper objectMapper = new ObjectMapper();public static <T> T fromJson(String json, Class<T> clazz) throws IOException {return objectMapper.readValue(json, clazz);}public static String toJson(Object obj) throws JsonProcessingException {return objectMapper.writeValueAsString(obj);}public static JsonNode unescapeJson(JsonNode node) {if (node.isTextual()) {ObjectNode parent = (ObjectNode) node.getParent();parent.set(node.fieldName(), objectMapper.valueToTree(StringEscapeUtils.unescapeJava(node.asText())));} else if (node.isArray()) {node.forEach(JsonUtils::unescapeJson);} else if (node.isObject()) {node.fields().forEachRemaining(entry -> unescapeJson(entry.getValue()));}return node;}public static void main(String[] args) throws IOException {String json = "{\"name\":\"hello\\nworld\",\"age\":18}";JsonNode rootNode = objectMapper.readTree(json);JsonNode unescapedNode = unescapeJson(rootNode);String unescapedJson = toJson(unescapedNode);System.out.println(unescapedJson); // 输出 {"name":"hello\nworld","age":18}}
}

在这个示例中,我们先将 JSON 字符串解析成了一个 JsonNode 对象,并将其传递给了 unescapeJson 方法。该方法会递归遍历 JSON 对象树,对所有字符串节点调用 StringEscapeUtils.unescapeJava() 方法去除转义字符,并将结果设置回到父节点中。最后,我们再将修改后的 JsonNode 对象转换成了 JSON 字符串并输出。

5. 正则

通过把/替换成为其他的进行解决

String encodedPath = request.getRequestURI().replaceAll("/", "-");

6. str.replace

 public static void main(String[] args) {String str = "{\"id\":\"projectId\", \"sceName\": \"417471\"}";str = str.replace("\\pos", ""); // 将 "\\pos" 替换为空字符串JSONObject jsonObject=JSONObject.parseObject(str);System.out.println(jsonObject);}

str = str.replace("\\pos", ""); // 将 "\\pos" 替换为空字符串; 我这边写demo中此方法貌似无用大家可尝试下;

扩展:网上看到的未实践

采用hutool工具;

String string = StrUtil.strip(httpResponse.body(), "\"");

“\pos” 是一种 RTF(Rich Text Format)文档中的控制字符,表示当前位置为绝对位置(absolute position)。具体来说,在 RTF 文档中可以使用 “\pos” 控制符来指定文本或对象在页面上的绝对位置坐标。

然而,在 JSON 字符串中出现 “\pos” 通常是由于将 RTF 格式文本或富文本复制到了代码中,导致转换为 JSON字符串时包含了非法字符。JSON 标准中只允许使用特定的字符表示字符串、数值等数据类型,并且需要进行相应的转义处理。

因此,在将富文本复制到代码中时,应该先将其转换为普通文本,再作为字符串拷贝到代码中。或者使用专门的工具将 RTF 格式文本转换为 HTML或 Markdown 等格式,再进行相应的处理和转换。这样可以避免类似于 “\pos” 这样的问题。

大家也可以提前在网上找在线的去转义;大家其他的解决办法也可以留言 希望可以帮助大家解决问题

JSONException: illegal identifier : \pos 1 异常报错问题相关推荐

  1. com.alibaba.fastjson.JSONException: illegal identifier : pos 2, json : [{quot;idquot;:1,quot;}]

    这个问题主要是接收到的json格式不对 接受到的错误格式为:[{"id":1,"}] 解决方法:将json串中的转义字符"替换成双引号即可 String dat ...

  2. JS Uncaught SyntaxError:Unexpected identifier异常报错原因及其解决方法

    最近在写ajax的时候,调用js方法,遇到了Uncaught SyntaxError:Unexpected identifier异常报错,开始搞不清原因,很苦恼. 以为是js方法参数个数和长度的问题, ...

  3. .NET(C#)时间日期字符串(String)格式化转换成Datetime异常报错问题

    .NET(C#)时间日期字符串(String)格式化转换成Datetime异常报错问题 参考文章: (1).NET(C#)时间日期字符串(String)格式化转换成Datetime异常报错问题 (2) ...

  4. python raise语句_python中异常报错的分析处理

    想必到现在经过python基础的学习之后,小伙伴们都已经开始写很多脚本了,有大的有小的,但是有的时候并不是所写的能够顺利跑出结果来,期间会有不但的报错以及异常,很多我们都不理解,所以也就不会修改,这是 ...

  5. 自定义 thinkphp5.0全局异常报错,继承基类\exception解决

    情景介绍:url请求是get方式,此次报错是测试post请求,异常返回错误信息是否正确,结果异常返回信息有误,返回信息不正确. 以下下报错信息,显示  自定义全局异常报错信息是传入HttpExcept ...

  6. as f报错 open with_一篇文章了解python常见内置异常报错

    我们在写python程序的时候经常会遇到一些报错信息(异常),有一些可能是人为进行的定义,有一些则是python内置的一些异常信息,接下来我们来了解一下这些常见的异常一些,也能够在我们遇到问题的时候能 ...

  7. QT 调用wmi 异常报错 内存异常等

    起初调用wmi获取信息,还是比较顺利的,参考微软msdn官方给的demo示例. 但是加入到QT项目中时,问题出现了,如上图,内存引发异常,但是我尝试屏蔽功能,只剩下一行打印,但仍然在报图中错误.和朋友 ...

  8. com.alibaba.druid.sql.parser.ParserException: syntax error, QUES %, pos 80 like报错解决

    最近,把各应用的jdbc连接池统一从dbcp2改成了druid,运行时druid报sql解析错误,如下: select * from test          where 1=1          ...

  9. springboot 直接转发调用_springboot-过滤器的页面跳转【重定向与请求转发】-异常报错...

    springboot中,增加过滤器后,页面重定向跳转与请求转发跳转,都出现报错. 求大佬帮忙解答,谢谢! 一.页面跳转代码: 1.重定向代码: response.sendRedirect(" ...

最新文章

  1. 关于在本地idea当中提交spark代码到远程的错误总结(第二篇)
  2. 成功解决xgboost.core.XGBoostError: b‘[14:48:08] 0 feature is supplied. Are you using raw Booster inter
  3. 预告:大牛现身说法 TensorFlow在工程项目中的应用 | AI 研习社
  4. 第17讲:aiohttp 异步爬虫实战
  5. dropbox文件_Dropbox即将发布的扩展程序更新将添加更多文件编辑支持,包括Pixlr照片...
  6. 数据开放 数据集_除开放式清洗之外:叙述是开放数据门户的未来吗?
  7. c语言实现socket转json,C++实现json形式的Socket传输图片
  8. 韩寒近期【雷人】语录
  9. C++实现简单的文件I/O操作
  10. BZOJ-4008: [HNOI2015]亚瑟王 (概率期望DP)
  11. 拓端tecdat|在PYTHON中进行主题模型LDA分析
  12. Eclipse下Hibernate使用学习
  13. c语言sinx幂级数展开,求幂级数展开式的方法
  14. 如何用od去手动脱壳
  15. ArcGIS批量裁剪栅格数据
  16. 使用Ryu实现交换式集线器(Switching hub)
  17. Laravel 5.7用户注册邮箱激活的功能演示
  18. 别人家的公司年终奖52个月工资-互联网企业年终裁员脸在哪
  19. mymps蚂蚁分类信息模板二次开发调用标签
  20. linux minit 截图,哼哈二将:Linux Mint 16 Cinnamon/Mate截图赏析

热门文章

  1. CAN网络Context-Aware Crowd Counting
  2. 全球名校AI课程库(21)| Harvard哈佛 · Python人工智能入门课程『Introduction to Artificial Intelligence with Python』
  3. 预测facebook签到位置
  4. 匕首线切割图纸下载_我们从匕首到科恩的旅程
  5. vue-cli生成的spa项目js、css、fonts、images文件路径找不到
  6. app模式会被第三方平台模式取代吗_4大原因会导致App被下架,你中招了吗?
  7. 【Web安全笔记】之【7.0 防御技术】
  8. mysql-数据更新操作
  9. 清心寡欲之程序员黑白色屏幕护眼
  10. 揭秘今日头条、抖音的推荐算法原理!