Json发送数据中,使用的Java转义字符 KanKan原创

kankan原创

与php后台发送数据的时候,要求用到这种格式。

private void sendJson(){

//初始化自定义的handler

CashHandler handler = new CashHandler(this);

//请求主地址,写在自定义Application中了,后面是接口名字

String url = MApplication.get().getAppServiceUrl() + "order/submit";

//自定义的发送请求方法

LReqEntity entity = new LReqEntity();

entity.setUrl(url);

//Lreqentity中,post方法,传参数的格式是Map(String,String)

Map<String, String> map = new HashMap<String, String>();

//拼接字符串

StringBuffer params = new StringBuffer();

// 从积分商城的提交 JUMPKEY是7,则是从积分商城购买

if (JUMPKEY.equals("7")) {

//dbmanager是自定义数据库查询方法,查询的是购物车最终购买的订单

List<CarteEntity> cartList = DBManager.get().queryFinalCarte(

userEntity.id);

//拼接字符串

params.append("[");

for (int i = 0; i < cartList.size(); i++) {

CarteEntity scoreEntity = new CarteEntity();

scoreEntity = cartList.get(i);

//下一行就是转义字符,为了发送时候,拼接出来“这个字符,用了转义字符  \"

//这样发送效果就是       {"A":54}

params.append("{\"A\":");

params.append(scoreEntity.id + "");

params.append(",");

params.append("\"B\":");

params.append(scoreEntity.buyCount);

params.append(",");

params.append("\"C\":");

params.append("\"score\"}");

if (i < cartList.size() - 1) {

params.append(",");

}

}

params.append("]");

}

entity.setParams(map);

entity.setReqMode(ReqMothed.POST);

handler.startLoadingData(entity);

}

这样,达到了拼接要求的效果,http://192.168.100.180:85/service/order/submit?{A=[{"A":95,"B":3,"C":"score"},{"A":99,"B":3,"C":"score"}], B=89}

有关转义字符,内容很多,

JAVA中转义字符:

最多的就是第一条了

1.特殊字符:就3个

\":双引号

\‘:单引号

\\:反斜线

2.八进制转义序列:\ + 1到3位5数字;范围‘\000‘~‘\377‘

\0:空字符

3.Unicode转义字符:\u + 四个十六进制数字;0~65535

\u0000:空字符

4.控制字符:5个

\‘ 单引号字符

\\ 反斜杠字符

\r 回车

\n 换行

\f 走纸换页

\t 横向跳格

\b 退格

点的转义:. ==> u002E

美元符号的转义:$ ==> u0024

乘方符号的转义:^ ==> u005E

左大括号的转义:{ ==> u007B

左方括号的转义:[ ==> u005B

左圆括号的转义:( ==> u0028

竖线的转义:| ==> u007C

右圆括号的转义:) ==> u0029

星号的转义:* ==> u002A

加号的转义:+ ==> u002B

问号的转义:? ==> u003F

反斜杠的转义: ==> u005C

======================================================================

下面的程序使用了两个Unicode的转义字符,它们是用其十六进制代码来表示Unicode字符。那么,这个程序会打印什么呢?

Java代码

public class EscapeRout{

public static void main(String[] args){

// \u0022 是双引号的Unicode转义字符

System.out.println("a\u0022.length()

+\u0022b".length());

}

}

public class EscapeRout{

public static void main(String[] args){

// \u0022 是双引号的Unicode转义字符

System.out.println("a\u0022.length()

+\u0022b".length());

}

}

对该程序的一种很肤浅的分析会认为它应该打印出26,因为在由两个双引号"a\u0022.length()+\u0022b"标识的字符串之间总共有26个字符。

稍微深入一点的分析会认为该程序应该打印16,因为两个Unicode转义字符每一个在源文件中都需要用6个字符来表示,但是它们只表示字符串中 的一个字符。因此这个字符串应该比它的外表看其来要短10个字符。 如果你运行这个程序,就会发现事情远不是这么回事。它打印的既不是26也不是16,而是2。

理解这个谜题的关键是要知道:Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。编译器在将程序解析成各种符号之前, 先将Unicode转义字符转换成为它们所表示的字符[JLS 3.2]。因此,程序中的第一个Unicode转义字符将作为一个单字符字符串字面常量("a")的结束引号,而第二个Unicode转义字符将作为另一 个单字符字符串字面常量("b")的开始引号。程序打印的是表达式"a".length()+"b".length(),即2。

如果该程序的作者确实希望得到这种行为,那么下面的语句将要清楚得多:

Java代码

System.out.println("a".length()+"b".length());

更有可能的情况是该作者希望将两个双引号字符置于字符串字面常量的内部。使用Unicode转义字符你是不能实现这一点的,但是你可以使用转义字 符序列来实现[JLS 3.10.6]。表示一个双引号的转义字符序列是一个反斜杠后面紧跟着一个双引号(\”)。如果将最初的程序中的Unicode转义字符用转义字符序列来 替换,那么它将打印出所期望的16(错误,应该是14,不知道是怎么会出来16):

Java代码

System.out.println("a\".length()+\"b".length());

许多字符都有相应的转义字符序列,包括单引号(\‘)、换行(\n)、制表符(\t)和反斜线(\\)。你可以在字符字面常量和字符串字面常量中使用转义字符序列。

实际上,你可以通过使用被称为八进制转义字符的特殊类型的转义字符序列,将任何ASCII字符置于一个字符串字面常量或一个字符字面常量中,但是最好是尽可能地使用普通的转义字符序列。

普通的转义字符序列和八进制转义字符都比Unicode转义字符要好得多,因为与Unicode转义字符不同,转义字符序列是在程序被解析为各种符号之后被处理的。

ASCII是字符集的最小公共特性集,它只有128个字符,但是Unicode有超过65,000个字符。一个Unicode转义字符可以被用来在只使用ASCII字符的程序中插入一个Unicode字符。一个Unicode转义字符精确地等价于它所表示的字符。

Unicode转义字符被设计为用于在程序员需要插入一个不能用源文件字符集表示的字符的情况。它们主要用于将非ASCII字符置于标识符、字符 串字面常量、字符字面常量以及注释中。偶尔地,Unicode转义字符也被用来在看起来颇为相似的数个字符中明确地标识其中的某一个,从而增加程序的清晰 度。

总之,在字符串和字符字面常量中要优先选择的是转义字符序列,而不是Unicode转义字符。Unicode转义字符可能会因为它们在编译序列中 被处理得过早而引起混乱。不要使用Unicode转义字符来表示ASCII字符。在字符串和字符字面常量中,应该使用转义字符序列;对于除这些字面常量之 外的情况,应该直接将ASCII字符插入到源文件中。

转义序列 含义

\n 回车(\u000a)

\t 水平制表符(\u0009)

\b 空格(\u0008)

\r 换行(\u000d)

\f 换页(\u000c)

\‘ 单引号(\u0027)

\" 双引号(\u0022)

\\ 反斜杠(\u005c)

\ddd 三位八进制

\udddd 四位十六进制

JAVA中转义字符:

1.八进制转义序列:

\ + 1到3位5数字;范围‘\000‘~‘\377‘

\0:空字符

2.Unicode转义字符:

\u + 四个十六进制数字;0~65535

\u0000:空字符

八进制的是1到3个数字并且注意数值范围,如果超了范围也会编译错误的,而十六进制的转义必须是4个十六进制数字,而且有一些无法转义,如‘\u000a‘,无法转移,会出现编译错误,而且相当多的数字没有对应的字符,只会转义成问号 而对于数字的转义,只要不超过范围既可以了。

3.特殊字符:就3个 \":双引号 \‘:单引号 \\:反斜线

4.控制字符:5个 \‘ 单引号字符 \\ 反斜杠字符 \r 回车 \n 换行 \f 走纸换页 \t 横向跳格 \b 退格

点的转义:. ==> u002E

美元符号的转义:$ ==> u0024

乘方符号的转义:^ ==> u005E

左大括号的转义:{ ==> u007B

左方括号的转义:[ ==> u005B

左圆括号的转义:( ==> u0028

竖线的转义:| ==> u007C

右圆括号的转义:) ==> u0029

星号的转义:* ==> u002A

加号的转义:+ ==> u002B

问号的转义:? ==> u003F

反斜杠的转义: ==> u005C

Json发送数据中,使用的Java转义字符 KanKan原创

时间: 2024-12-09 11:41:15

Json发送数据中,使用的Java转义字符 KanKan原创的相关文章

Android,使用Json发送数据中,使用的Java转义字符 KanKan原创

kankan原创 与php后台发送数据的时候.要求用到这样的格式. private void sendJson(){ //初始化自己定义的handler CashHandler handler = new CashHandler(this); //请求主地址.写在自己定义Application中了,后面是接口名字 String url = MApplication.get().getAppServiceUrl() + "order/submit"; //自己定义的发送请求方法 LReq

Ajax请求php返回json对象数据中包含有数字索引和字符串索引,在for in循环中取出数据的顺序问题

//php中的数组数据格式 Array ( [all] => Array ( [title] => ALL [room_promotion_id] => all ) [best_available_rate] => Array ( [title] => Best Available Rate [room_promotion_id] => best_available_rate ) [30] => Array ( [room_promotion_id] =>

java 处理json格式数据中的转义斜杠

1.{\"Count\":\"3\",\"ErrorString\":\"\",\"Success\":true,\"URL\":\"http:\\\/\\\/172.16.80.65:8080\\\/LoginSSO.aspx?UserCode=wubg&Type=WorkItem\",\"UserId\":\"1226\&qu

SQLMAP注入json格式数据

当注入点在json格式数据中时,SQLMAP可能会犯傻,导致找不到注入点, 使用-p指定参数又不好指定json格式中的字段, 这个时候就需要人工修改一下注入的json数据,使SQLMAP能够找到注入参数: 导致SQLMAP犯傻的json输入类似如下: {"name":["string"]} 将其修改为以下两种形式都可以使SQLMAP找到该注入点(而不是直接跳过): // 方式1,加* {"name":["string*"]} 

我的Android进阶之旅------&gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

JAVA中使用JSON进行数据传递

在接口的访问和数据的传输方面使用的比较多的是使用JSON对象来操作格式化数据:在服务器端采用JSON字符串来传递数据并在WEB前端或者Android客户端使用JSON来解析接收到的数据. 首先,在JAVA中使用JSON需要引入 org.json 包(点击 这里 可以下载相应的JAR包!), 并在程序中引入相应的JSON类: import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; 其

PHP如何通过Http Post请求发送Json对象数据?

因项目的需要,PHP调用第三方 Java/.Net 写好的 Restful Api,其中有些接口,需要 在发送 POST 请求时,传入对象. Http中传输对象,最好的表现形式莫过于JSON字符串了,但是作为参数的接收方,又是需要被告知传过来的是JSON! 其实这不难,只需要发送一个 http Content-Type头信息即可,即 “Content-Type: application/json; charset=utf-8”,参考代码如下: <?php /** * PHP发送Json对象数据

通过Jquery中Ajax获取json文件数据

1. JSON(JavaScript Object Notation): javaScript对象表示法: 是存储和交换文本信息的语法,比xml更小,更快,更易解析. 2. JSON基本书写格式 : 名称/值对. 例如: "Student":"Tom" Json值可以是: 数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true或者false) 数组(在方括号中) 对象(在花括号中) null  例如(对象):{"name":"to

request中获取post的json对象数据content-type=“text/plain”

其实采用http://www.cnblogs.com/SimonHu1993/p/7295750.html中的方法一都能获取到,就是通过获取request中的流数据,拿到json数据,理论上应该适用各种content-type的请求数据. /** *获取 request 中用POST方式"Content-type"是 * "text/plain"发送的 json数据 * @author: Simon * @date: 2017年8月6日 下午7:44:09 * @p