package json; public class User { public String name; }
package json; import jodd.io.FileUtil; import com.alibaba.fastjson.JSON; import com.google.gson.Gson; public class JsonTest { public static void main(String[] args) { // String json = "{\"name\":\"abcde\"}"; String json = "{\"name\":\"ab\\cde\"}"; System.out.println(json); //t1(json); t2(); } public static void t2() { User user = new User(); user.name = "ab\\cde"; System.out.println(user.name); String json = JSON.toJSONString(user); System.out.println(json); json = new Gson().toJson(user); System.out.println(json); } public static void t1(String json) { User user2 = JSON.parseObject(json, User.class); User user3 = new Gson().fromJson(json, User.class); } }
t2 方法结果:
ab\cde {"name":"ab\\cde"} {"name":"ab\\cde"}
可以看出,gson,fastjson自动转义了,将一个\符号,换成了两个\\符号。
t1方法结果:
{"name":"ab\cde"} Exception in thread "main" com.alibaba.fastjson.JSONException: unclosed string : c at com.alibaba.fastjson.parser.JSONLexerBase.scanString(JSONLexerBase.java:970) at com.alibaba.fastjson.parser.JSONLexerBase.nextToken(JSONLexerBase.java:104) at com.alibaba.fastjson.parser.JSONLexerBase.nextTokenWithChar(JSONLexerBase.java:360) at com.alibaba.fastjson.parser.JSONLexerBase.nextTokenWithColon(JSONLexerBase.java:478) at com.alibaba.fastjson.parser.deserializer.ASMJavaBeanDeserializer.parseField(ASMJavaBeanDeserializer.java:73) at com.alibaba.fastjson.parser.deserializer.ASMJavaBeanDeserializer$InnerJavaBeanDeserializer.parseField(ASMJavaBeanDeserializer.java:86) at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:310) at com.alibaba.fastjson.parser.deserializer.ASMJavaBeanDeserializer.parseRest(ASMJavaBeanDeserializer.java:96) at Fastjson_ASM_User_1.deserialze(Unknown Source) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:513) at com.alibaba.fastjson.JSON.parseObject(JSON.java:244) at com.alibaba.fastjson.JSON.parseObject(JSON.java:220) at com.alibaba.fastjson.JSON.parseObject(JSON.java:179) at com.alibaba.fastjson.JSON.parseObject(JSON.java:323) at json.JsonTest.t1(JsonTest.java:33) at json.JsonTest.main(JsonTest.java:15)
由于{"name":"ab\cde"} 有转义字符,所以报异常了。
如果换成String json = "{\"name\":\"ab\\\\86cde\"}";就没问题了。有两个\\符号。
java 定义一个\ 字符串表示是 “\\”, 定义两个 \\ 字符串表示 “\\\\”
控制台输出是 \ ,\\
文件里面的\字符串,控制台输出就是\
String s = "\\"; String ss = "\\\\"; System.out.println(s); System.out.println(ss); //文件的内容:\ String sss = FileUtil.readString("f:\\5.txt", "gbk"); System.out.println(sss);
输出结果:
\ \\ \
public static void test2() throws Exception { User user = new User(); // 内容带有 \符号 String s = FileUtil.readString("f:\\2.txt"); user.name = s; // json。toJSONString 转换后 \ 变成 \\ String json = JSON.toJSONString(user); System.out.println(json); // json 转换后 \\ 变成 \ 所以 user.name.equals(user2.name) true User user2 = JSON.parseObject(json, User.class); // json 转换后 \\ 变成 \ System.out.println(user2.name); System.out.println("==============================="); // 所以 user.name.equals(user2.name) true System.out.println(user.name.equals(user2.name)); // System.out.println("user.name len =="+s.length()); // System.out.println("user2.name len =="+user2.name.length()); }
总结:
1. java 对象 转换为 json 字符串,会对一些字符转义。
2. 转义后的 json字符串 转换为java对象,会将转义后的字符串反转义,还原。
注意:未转义的json字符串(如果含有特殊字符),转换会报错。
相关推荐
### C#常用的转义字符 在C#编程语言中,转义字符是非常重要的概念之一,它们可以帮助开发者在字符串中插入特殊字符或者控制字符,从而实现更丰富的文本处理功能。本文将详细介绍C#中常见的转义字符及其用法,并通过...
接着,我们创建了一个新的JSON对象,并添加了"name"和"age"字段,最后将其转换回JSON字符串并打印。 **6. 注意事项** 使用cJSON库时,要注意以下几点: - cJSON不检查内存溢出,确保有足够的内存分配。 - 解析后的...
在处理JSON数据时,经常会遇到转义字符的使用,尤其是反斜杠(\)。在JSON格式的字符串中,反斜杠用作转义字符的引导,例如用来转义一个双引号("),以确保双引号被包含在字符串中而不是被解释为字符串的结束。然而...
C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...
JSON转义在JS中快速转义JSON字符串。 手动转义小的JSON字符串比使用本机更快。 主要焦点是非常快速地检查不需要转义的字符串,同时还改善了转义自身或至少不低于JSON.stringify的条件。基准测试运行基准测试( npm ...
本文将围绕“gson转义字符”这一主题展开,深入探讨如何避免Gson在使用时自动将一些字符转为Unicode转义字符。 ### 一、问题背景 在Java项目中,我们经常会使用Gson来处理JSON格式的数据。例如,我们需要将一个...
总的来说,当处理JSON字符串时,确保字符串中的特殊字符(如双引号)已经正确转义,使用`JSON.parse()`进行转换,如果遇到兼容性问题,可以使用`eval()`作为备选方案。同时,对于全局替换需求,记得使用正则表达式和...
C#转义字符的使用和输出 C#转义字符是C#语言中的一种特殊字符常量,以反斜线"\"开头,后跟一个或几个字符。这些字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。主要用来表示那些用一般字符不便于...
关于JSON编码的选项,PHP提供了JSON_HEX_QUOT、JSON_HEX_APOS、JSON_HEX_AMP、JSON_HEX_TAG等常量,用于转义特殊字符。例如,JSON_PRETTY_PRINT可以使输出的JSON更加易读,适合调试。JSON_UNESCAPED_UNICODE则允许...
在处理JSON数据时,有时会遇到特殊字符串,这些字符串可能包含需要转义的字符,例如双引号、反斜杠等。本篇文章将深入探讨JSON中的特殊字符串转换,以及如何正确处理它们。 一、JSON特殊字符与转义 在JSON中,字符...
因此,在这种情况下,我们需要先对字符串进行反转义操作,去除其中的转义字符,使其恢复为原始的 JSON 格式,然后再进行解析。 #### 3. 如何实现反转义 实现 JSON 字符串的反转义通常有多种方法,包括但不限于使用...
去除长字符串中的转义字符,将其转换为没有转义字符的字符串,以及过长的字符串在idea中如何操作
c# json格式字符转换 JsonHelper.cs
(其实将符合json标准的字符串转化为js对象可以用eval,但是eval性能相对差且存在安全隐患(会执行json字符串中的代码),本文仅写JSON) 本文写的是转义字符对JSON.parse方法的影响。 一般来说在JSON.parse的参数...
标题中的"快速解决owin返回json字符串多带了双引号”多了重string转义字符串"指的是在OWIN中返回JSON数据时,JSON字符串中的双引号被额外转义,导致最终接收到的JSON数据格式不正确。这种情况通常是因为在多个地方...
在实际开发中,转义字符不仅限于上述用途,它们还可以在正则表达式、XML和JSON等数据格式中发挥作用。例如,如果你正在编写一个正则表达式,可能需要转义特殊字符以确保它们被当作普通字符处理,而不是正则表达式的...
它能够解析一个包含JSON转义字符的字符串,并将其转换为未转义的格式。例如,如果有一个包含`\n`的字符串,`unescapeJson()`方法会将它转换成包含实际换行符的新字符串。这对于从JSON字符串中提取原始文本或者在显示...
当从POST请求中接收到JSON字符串时,例如`$_POST['json']`,可以使用`stripslashes()`来去除字符串中的转义字符。示例如下: ```php $str = stripslashes($_POST['json']); ``` 之后,可以使用`json_decode()`函数...
在编程和计算机科学中,转义字符是一种特殊符号,用于指示特定的含义或功能,而不是其本身的基本字符值。它们通常被用来表示那些在文本字符串中具有特殊含义或者难以直接输入的字符。转义字符通常以反斜杠(\)开头...