java Json 串中的转义字符
发布网友
发布时间:2022-04-20 02:28
我来回答
共11个回答
懂视网
时间:2022-04-22 14:04
转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当做文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写的规则。第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。
其实所有编程语言,拥有转义字符的原因基本上是两点:
一、使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没有现成的文字代号。所以只能用转义字符来表示 。
二、某一些特定的字符在编辑语言中被定义为特殊用途的字符。
这些字符由于被定义为特殊用途,它们失去了原有的意义。比如说Html中,<被HTML定义为标签的开始,所以当我们转入<时,HTML就会把它当作为开始,而不是当作一个<来看待。再如PHP 的双引号("),被PHP定义为字符串的外围标签,所以如果你在一对双引号里面,还想要使用双引号,只能使用转义字符了。不然PHP就会报错了。
从上面也可以看出转义无非是两种情况:
1:将普通字符转为特殊用途,一般是编程语言中,用于表示不能直接显示的字符,比如后退键,回车键,等。
2:用来将特殊意义的字符转换回它原来的意义。一般用在正则表达式中。还有有些脚本语言是弱类型,有些语言比如html 并不是编程语言,而是标记语言,有些语言只有一种类型 比如shell 脚本语言,这些语言中字符串都不加引号” ” ,或者可以不加引号“ ”,所以有时候需要转义字符说明某字符此时的身份是普通字符,而不是有特殊意义的元字符。
另外出于网站的安全。在数据写入数据库前,都会使用转义字符(函数)对一些敏感字符进行转义。这样做可以避免一些别有用心的人利用特殊符号的注入攻击。
JSon串在被串行化后保存在文件中,读取字符串时,是不能直接拿来用JSON.parse()解析为JSON 对象的。因为它是一个字符串,不是一个合法的JSON对象格式。
例如下面的JSON串保存在文件中,读出来不能直接解析:
“{"resourceId":"dfead70e4ec5c11e43514000ced0cdcaf","properties":{"process_id":"process4","name":"","documentation":"","processformtemplate":""}}"
这个串如果出现在代码中是没有问题的,因为反斜杠就表示转义,但如果从文本文件中直接读出来就是这个样子,则不能直接用JSON.parse()进行解析,需要反串行化,消除掉反斜杠。有些programmer喜欢自己写一个工具类来做这样的事情,但已经有方便快捷的工具类可以来做这件事情,毋需我们重复发明车轮子。
可以直接使用Apache 的 common.lang工具包(使用工具类:org.apache.commons.lang.StringEscapeUtils)。
例子如下:
public void test(){
String str1 = "{"resourceId":"dfead70e4ec5c11e43514000ced0cdcaf","properties":{"process_id":"process4
"+"","name":"","documentation":"","processformtemplate":""}}";
String tmp = StringEscapeUtils.unescapeJavaScript(str1);
System.out.println("tmp:" + tmp);
}
输出:
tmp:{"resourceId":"51ad70e41c5c11e88514000c290cdcfa","properties":{"process_id":"process4","name":"","documentation":"","processformtemplate":""}}
热心网友
时间:2022-04-22 11:12
一:解析普通json
1:不带转化字符
格式{"type":"ONLINE_SHIPS","message":{"currentTime":1400077615368,"direction":0,"id":1,"latitude":29.5506,"longitude":106.6466}}
JSONObject jsonObject = new JSONObject(jsonstr).getJSONObject("message");
System.out.println("currentTime:"+jsonObject.get("currentTime"));
System.out.println("direction:"+jsonObject.get("direction"));
System.out.println("latitude:"+jsonObject.get("latitude"));
System.out.println("longitude:"+jsonObject.get("longitude"));
jsonarray
JSONObject jo = ja.getJSONArray("cargoList").getJSONObject(0);
2:带转义字符的json格式
{"type":"ONLINE_SHIPS","message":"{\"currentTime\":1400077615368,\"direction\":0,\"id\":1,\"latitude\":29.5506,\"longitude\":106.6466}"}
其实也很简单,先把它转化成字符串就可以了
JSONObject jsonObject = new JSONObject(jsonstr);
//先通过字符串的方式得到,转义字符自然会被转化掉
String jsonstrtemp = jsonObject.getString("message");
System.out.println("message:"+jsonstrtemp);
jsonObject = new JSONObject(jsonstrtemp);
System.out.println("currentTime:"+jsonObject.get("currentTime"));
System.out.println("direction:"+jsonObject.get("direction"));
System.out.println("latitude:"+jsonObject.get("latitude"));
System.out.println("longitude:"+jsonObject.get("longitude"));
二:遍历Json对象
JSONObject ports = ja.getJSONObject("ports");
Iterator<String> keys = ports.keys();
while(keys.hasNext()){
String key=keys.next();
String value = ports.getString(key);
}
三:使用Gjson,json与对象相互转化
使用Gson轻松将java对象转化为json格式
String json = gson.toJson(Object);//得到json形式的字符串
User user = gson.fromJson(json,User.class);//得到对象
转化成list
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.lc.function.Action;
import com.lc.models.Groups;
public class MapSearch {
private void ParseData(String _data)
{
Gson gson = new Gson();
List<Groups> ps = gson.fromJson(_data, new TypeToken<List<Groups>>(){}.getType());
System.out.println(ps.get(0).getGroup_name());
}
}
热心网友
时间:2022-04-22 12:30
一:解析普通json
1:不带转化字符
格式{"type":"ONLINE_SHIPS","message":{"currentTime":1400077615368,"direction":0,"id":1,"latitude":29.5506,"longitude":106.6466}}
JSONObject jsonObject = new JSONObject(jsonstr).getJSONObject("message");
System.out.println("currentTime:"+jsonObject.get("currentTime"));
System.out.println("direction:"+jsonObject.get("direction"));
System.out.println("latitude:"+jsonObject.get("latitude"));
System.out.println("longitude:"+jsonObject.get("longitude"));
jsonarray
JSONObject jo = ja.getJSONArray("cargoList").getJSONObject(0);
2:带转义字符的json格式
{"type":"ONLINE_SHIPS","message":"{\"currentTime\":1400077615368,\"direction\":0,\"id\":1,\"latitude\":29.5506,\"longitude\":106.6466}"}
其实也很简单,先把它转化成字符串就可以了
JSONObject jsonObject = new JSONObject(jsonstr);
//先通过字符串的方式得到,转义字符自然会被转化掉
String jsonstrtemp = jsonObject.getString("message");
System.out.println("message:"+jsonstrtemp);
jsonObject = new JSONObject(jsonstrtemp);
System.out.println("currentTime:"+jsonObject.get("currentTime"));
System.out.println("direction:"+jsonObject.get("direction"));
System.out.println("latitude:"+jsonObject.get("latitude"));
System.out.println("longitude:"+jsonObject.get("longitude"));
二:遍历Json对象
JSONObject ports = ja.getJSONObject("ports");
Iterator<String> keys = ports.keys();
while(keys.hasNext()){
String key=keys.next();
String value = ports.getString(key);
}
三:使用Gjson,json与对象相互转化
使用Gson轻松将java对象转化为json格式
String json = gson.toJson(Object);//得到json形式的字符串
User user = gson.fromJson(json,User.class);//得到对象
热心网友
时间:2022-04-22 14:04
带有转义字符的java Json串 如下
{"type":"ONLINE_SHIPS","message":"{\"currentTime\":1400077615368,\"direction\":0,\"id\":1,\"latitude\":29.5506,\"longitude\":106.6466}"}
解析时先把它转化成字符串就可以了 如下
JSONObject jsonObject = new JSONObject(jsonstr);
String jsonstrtemp = jsonObject.optString("message");
解析获取json字符串里的值时,建议用jsonObject.optString的方式,它相较于传统的
jsonObject.getString方式 在得不到你想要的值时候返回空字符串, 而getString的方式
会抛出异常
热心网友
时间:2022-04-22 15:56
没办法,用工具一次就加好。比如说Notepad++ 等
用替换的方式一下子弄好,还支持部分正则表达式
你觉得eclipse能辨别你那个双引号需要转义哪些不用转义,怎么可能这么智能。
热心网友
时间:2022-04-22 18:04
需要添加的。。。。。。。。在 notepad++ 那样的环境,使用批量替换 ,更快捷
热心网友
时间:2022-04-22 20:28
词法分析器在读取单词的时候如果读取到"的话会把它作为一个系统操作符读入内存,但是如果前面有一个\就会把"当作一个字符串
热心网友
时间:2022-04-22 23:10
java里面只能去加\ 不像C#里面有个@标记 不如你不想家可以用一个对象来转json
热心网友
时间:2022-04-23 02:08
java的json不是支持add字符串、list和其他类的吗?你把他封装成类再add进去就不需要去一个一个转码了
热心网友
时间:2022-04-23 05:22
这个串是你自己拼出来的? 还是开始就定义的?
热心网友
时间:2022-04-23 08:54
好奇葩的想法,要不你自己写个语言定义一个语法,想怎么写怎么写。我支持你,我也烦