字符转义问题(备忘)

本文详细解析了在Java中使用JSON格式字符串进行数据传输时遇到的字符转义问题,并通过实例说明如何正确处理字符串类型的字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于定java和delphi之间一个小的传输协议的问题,想利用JSON格式的字符串形式(字节流)进行数据封装。但突然想到字符转义的问题,在脑子里绕啊绕,结果把自己绕进去了,看了个电影,回头想,忽然豁然开朗,还是记在这里免得哪天又把自己绕进去了。

本身字符串遇到",',\还有几个控制字符都会进行转义。这些不需要我们额外考虑。所以如果我们所要传送的某项数据是字符串类型的话,例如:field项是字符串,实际内容是a"b\c,那么我们要传送的JSON格式的字符串应该是:{"field":"a\"b\\c"},这样完全正确。JSONObject的getString和get方法都能获得正确的结果。

而当时开始考虑转义问题的时候是写了几行测试代码,我是这样写的:
String str = "{field:'a\"b\\c'}";结果怎么也不是输出我们想要的结果。哈哈,其实是这样写,String首先解码一遍这个字符串,得到的实际内容是:{field:'a"b\c'},而这个字符串在传入JSONObject构造子过程中自然而然由JSONObject再翻译了一遍,JSONObject按照这个字符串应该是生成了这样的结构:{"field":"a\"bc"}(\由于转义失败而被忽略)。那么这样jsonObj.getString("field")回来的数据当然成了a"bc了。

呵呵,所以呢,其实在测试的那几行代码时,要是手写字符串而不是从别的途径获取的话,应该这样写了:String str = "{\"field\":\"a\\\"b\\\\c\"}" ,这样字符串的实际内容才是{"field":"a\*b\\c"},通过jsonObj.getString("field")也获得了预期的结果。

总之,把你的格式中的字符串的标志双引号作为起点,字符串中出现的特殊字符进行转义就可以了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值