您的位置:

包含cod的自定义json编码器的词条

包含cod的自定义json编码器的词条

更新:

本文目录一览:

Cod战区多少tick

12tick。Cod战区tick是自定义的,一般为12tick,而很多人因为使用速度太慢设置为是60tick使得游戏体验感更好,服务器的速度更快。

【json.tool】关于python -m json.tool中文乱码问题的处理

python一行式解析json怎么避免中文转化为unicode编码?

在以 json 为数据传输格式的 RESTful 接口非常流行。为调试这样的接口,一个常用的办法是使用 curl 命令:

curl   

对于返回的 json 字符串,一般在服务端不加处理的情况下,都是没有任何 '\t' 和 '\n' 的。

为了方便查看,在 bash 上可以简单地对它进行格式化:

curl | python -m  json.tool

当然这要求机器上安装了 python,其实也就是利用了 json.tool 这个程序。

然而有时候还有一个问题,就是若返回的 json 字符串中包含中文,那么这样打印出来之后,中文会变成以 \u 开头的转义形式,从而让程序员无法直接观察到中文的内容,这并非是一个 bug,而是 json 本身的标准,它要求 json 的内容都是 ascii 编码的,标准的 json 编码器和解码器都会遵循这一点。

# vim /usr/lib64/python2.7/json/tool.py

# curl -s -X POST -H 'cache-control: no-cache' | python -m json.tool

python -m json.tool中文乱码问题

python -m json.tool 中文乱码 Format JSON with python

python -m json.tool to output Chinese

python -m json.tool to output Chinese

Saving utf-8 texts with json.dumps as UTF8, not as \u escape sequence

如何让Jackson JSON生成的数据包含的中文以unicode方式编码

Jackson JSON其实在默认设置下已经具备了对Unicode编码的JSON数据进行解析。所欠缺的就是在序列化对象时缺少相应的步骤。好在Jackson JSON框架允许我们自定义序列化方法。那么我们就来写一个序列化类:

复制代码代码如下:

import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;

import org.codehaus.jackson.JsonGenerator;

import org.codehaus.jackson.JsonProcessingException;

import org.codehaus.jackson.impl.JsonWriteContext;

import org.codehaus.jackson.map.JsonSerializer;

import org.codehaus.jackson.map.SerializerProvider;

import org.codehaus.jackson.util.CharTypes;

public class StringUnicodeSerializer extends JsonSerializerString {

private final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();

private final int[] ESCAPE_CODES = CharTypes.get7BitOutputEscapes();

private void writeUnicodeEscape(JsonGenerator gen, char c) throws IOException {

gen.writeRaw('\\');

gen.writeRaw('u');

gen.writeRaw(HEX_CHARS[(c 12) 0xF]);

gen.writeRaw(HEX_CHARS[(c 8) 0xF]);

gen.writeRaw(HEX_CHARS[(c 4) 0xF]);

gen.writeRaw(HEX_CHARS[c 0xF]);

}

private void writeShortEscape(JsonGenerator gen, char c) throws IOException {

gen.writeRaw('\\');

gen.writeRaw(c);

}

@Override

public void serialize(String str, JsonGenerator gen,

SerializerProvider provider) throws IOException,

JsonProcessingException {

int status = ((JsonWriteContext) gen.getOutputContext()).writeValue();

switch (status) {

case JsonWriteContext.STATUS_OK_AFTER_COLON:

gen.writeRaw(':');

break;

case JsonWriteContext.STATUS_OK_AFTER_COMMA:

gen.writeRaw(',');

break;

case JsonWriteContext.STATUS_EXPECT_NAME:

throw new JsonGenerationException("Can not write string value here");

}

gen.writeRaw('"');//写入JSON中字符串的开头引号

for (char c : str.toCharArray()) {

if (c = 0x80){

writeUnicodeEscape(gen, c); // 为所有非ASCII字符生成转义的unicode字符

}else {

// 为ASCII字符中前128个字符使用转义的unicode字符

int code = (c ESCAPE_CODES.length ? ESCAPE_CODES[c] : 0);

if (code == 0){

gen.writeRaw(c); // 此处不用转义

}else if (code 0){

writeUnicodeEscape(gen, (char) (-code - 1)); // 通用转义字符

}else {

writeShortEscape(gen, (char) code); // 短转义字符 (\n \t ...)

}

}

}

gen.writeRaw('"');//写入JSON中字符串的结束引号

}

}

这个序列化类将要对应用中所有使用Jackson JSON的地方全都用一种方法来处理字符串类型。光有了方法还不行,还要对它进行注册。让Jackson JSON在序列化对象的时候使用刚刚定义好的方法:

复制代码代码如下:

if (objectMapper== null){

objectMapper= new ObjectMapper();

//当找不到对应的序列化器时 忽略此字段

objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);

//使Jackson JSON支持Unicode编码非ASCII字符

CustomSerializerFactory serializerFactory= new CustomSerializerFactory();

serializerFactory.addSpecificMapping(String.class, new StringUnicodeSerializer());

objectMapper.setSerializerFactory(serializerFactory);

//支持结束

}

接下来我们来做一个测试用的对象,验证我们的代码:

复制代码代码如下:

import java.util.Date;

import net.csdn.blog.chaijunkun.util.DateDeserializer;

import net.csdn.blog.chaijunkun.util.DateSerializer;

import net.csdn.blog.chaijunkun.util.DateTimeDeserializer;

import net.csdn.blog.chaijunkun.util.DateTimeSerializer;

import org.codehaus.jackson.annotate.JsonPropertyOrder;

import org.codehaus.jackson.map.annotate.JsonDeserialize;

import org.codehaus.jackson.map.annotate.JsonSerialize;

@JsonPropertyOrder(alphabetic= false)

public class DemoObj {

private Integer sid;

private String stuName;

private Boolean sex;

@JsonSerialize(using= DateSerializer.class)

@JsonDeserialize(using= DateDeserializer.class)

private Date birthday;

@JsonSerialize(using= DateTimeSerializer.class)

@JsonDeserialize(using= DateTimeDeserializer.class)

private Date logTime;

//Getters and Setters

}

从代码上可以看出,我们并没有对String类型的属性强制指定用何种序列与反序列方法。然后我们来构造测试用例:

复制代码代码如下:

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import net.csdn.blog.chaijunkun.json.DemoObj;

import net.csdn.blog.chaijunkun.util.JSONUtil;

import org.apache.log4j.Logger;

public class JSONTest {

private static Logger logger= Logger.getLogger(JSONTest.class);

private static String json= "{\"sid\":2,\"stuName\":\"\u6C5F\u5357Style\",\"sex\":true,\"birthday\":\"2012-07-15\",\"logTime\":\"2012-12-04 19:22:36\"}";

public static void main(String[] args) {

DemoObj objSrc= new DemoObj();

objSrc.setSid(1);

objSrc.setStuName("鸟叔");

objSrc.setSex(true);

Calendar calendar= Calendar.getInstance();

calendar.set(1977, Calendar.DECEMBER, 31, 0, 0, 0);

objSrc.setBirthday(calendar.getTime());

objSrc.setLogTime(new Date());

logger.info(String.format("转换为JSON后的数据:%s", JSONUtil.toJSON(objSrc)));

DemoObj objDes= JSONUtil.fromJSON(json, DemoObj.class);

if(objDes==null){

logger.info("反序列化失败");

}else{

logger.info("反序列化成功");

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

logger.info(String.format("标识:%d", objDes.getSid()));

logger.info(String.format("姓名:%s", objDes.getStuName()));

logger.info(String.format("性别:%s", objDes.getSex()==true?"男":"女"));

logger.info(String.format("生日:%s", sdf.format(objDes.getBirthday())));

logger.info(String.format("登录日期:%s", sdf.format(objDes.getLogTime())));

}

}

}

看一下输出:

复制代码代码如下:

转换为JSON后的数据:{"sid":1,"stuName":"\u9E1F\u53D4","sex":true,"birthday":"1977-12-31","logTime":"2012-12-04 19:31:57"}

反序列化成功

标识:2

姓名:江南Style

性别:男

生日:2012-07-15 00:00:00

登录日期:2012-12-04 19:22:36

我们看到,已经成功将中文字符显示成为了Unicode编码的数据。同样,我们之前构造的Unicode编码的数据,在不经过任何修改的情况下成功显示出来了。

细心的朋友也许观察到了,在测试用的对象定义代码中,针对同样Date类型的属性“birthday”和“logTime”,我们指定了不同的序列化与反序列化方法。让我们来看烂这两个有什么不同:

复制代码代码如下:

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.codehaus.jackson.JsonGenerator;

import org.codehaus.jackson.JsonProcessingException;

import org.codehaus.jackson.map.JsonSerializer;

import org.codehaus.jackson.map.SerializerProvider;

public class DateTimeSerializer extends JsonSerializerDate {

@Override

public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)

throws IOException, JsonProcessingException {

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String formattedDate= sdf.format(date);

gen.writeString(formattedDate);

}

}

复制代码代码如下:

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import org.codehaus.jackson.JsonParser;

import org.codehaus.jackson.JsonProcessingException;

import org.codehaus.jackson.map.DeserializationContext;

import org.codehaus.jackson.map.JsonDeserializer;

public class DateTimeDeserializer extends JsonDeserializerDate {

@Override

public Date deserialize(JsonParser parser, DeserializationContext context)

throws IOException, JsonProcessingException {

String dateFormat= "yyyy-MM-dd HH:mm:ss";

SimpleDateFormat sdf= new SimpleDateFormat(dateFormat);

try{

String fieldData= parser.getText();

return sdf.parse(fieldData);

}catch (Exception e) {

Calendar ca= Calendar.getInstance();

ca.set(1970, Calendar.JANUARY, 1, 0, 0, 0);

return ca.getTime();

}

}

}

复制代码代码如下:

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.codehaus.jackson.JsonGenerator;

import org.codehaus.jackson.JsonProcessingException;

import org.codehaus.jackson.map.JsonSerializer;

import org.codehaus.jackson.map.SerializerProvider;

public class DateSerializer extends JsonSerializerDate {

@Override

public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)

throws IOException, JsonProcessingException {

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

String formattedDate= sdf.format(date);

gen.writeString(formattedDate);

}

}

复制代码代码如下:

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import org.codehaus.jackson.JsonParser;

import org.codehaus.jackson.JsonProcessingException;

import org.codehaus.jackson.map.DeserializationContext;

import org.codehaus.jackson.map.JsonDeserializer;

public class DateDeserializer extends JsonDeserializerDate {

@Override

public Date deserialize(JsonParser parser, DeserializationContext context)

throws IOException, JsonProcessingException {

String dateFormat= "yyyy-MM-dd";

SimpleDateFormat sdf= new SimpleDateFormat(dateFormat);

try{

String fieldData= parser.getText();

return sdf.parse(fieldData);

}catch (Exception e) {

Calendar ca= Calendar.getInstance();

ca.set(1970, Calendar.JANUARY, 1, 0, 0, 0);

return ca.getTime();

}

}

}

cod16自定义房间有经验吗

有。cod16自定义里也是可以加经验条的。所以可以通过cod16自定义游戏,通过改变规则实现快速刷经验条。经验条只是让宠物进化加速,只是加速而不是满条就可以进化。

包含cod的自定义json编码器的词条

本文目录一览: 1、Cod战区多少tick 2、【json.tool】关于python -m json.tool中文乱码问题的处理 3、如何让Jackson JSON生成的数据包含的中文以unicod

2023-12-08
包含java基础笔记day1的词条

2022-11-20
包含python详解json模块的词条

本文目录一览: 1、python的json模块 2、Python模块的几种类型简介 3、【Python】浅谈python中的json python的json模块 json.load不是什么文件都能打开

2023-12-08
包含pythonjsondump的词条

本文目录一览: 1、【Python】浅谈python中的json 2、Python用json模块时怎么才能用dump存数据时自动换行呢 3、python 用json.dumps处理字典后如何还原? 4

2023-12-08
包含python使用笔记24的词条

2022-11-21
包含javaee之xml与json的词条

本文目录一览: 1、json和xml的区别 2、java开发,json是干什么的 3、json数据格式和xml数据格式的区别和用法是什么? json和xml的区别 JOSN:JSON是结构化数据串行化

2023-12-08
包含python对比json的词条

本文目录一览: 1、用python依次比较2个文件夹内的JSON文件的差异? 2、【Python】浅谈python中的json 3、python3,如何对比2个结构一样的json? 用python依次

2023-12-08
包含pythonstrings转json的词条

本文目录一览: 1、【Python】浅谈python中的json 2、python3 对象 |字典|json|yaml|字符串 相互转化 3、python 字符串转 json 4、python字符串如

2023-12-08
包含pythonjson解析入库的词条

本文目录一览: 1、python json快速解析命令 2、【Python】浅谈python中的json 3、python3.0怎么用json从文件解析 python json快速解析命令 json.

2023-12-08
包含javatostring转json的词条

本文目录一览: 1、java string 转 json 2、java中字符串怎么转json 3、java实体类怎么转换成json。 4、如何将数据实体转换为 JSON 字符串 5、java 数组怎么

2023-12-08
htmljs编程笔记(html代码笔记)

本文目录一览: 1、html代码和JS代码有什么区别 2、如何在html中调用js函数 3、JavaScript学习笔记之数组基本操作示例 4、HTML5初学者笔记 5、《web前端笔记7》js字符—

2023-12-08
包含ajax传输json实例的词条

本文目录一览: 1、Ajax调用restful接口传送Json格式数据的方法 2、ajax如何传递json格式的参数 3、js ajax怎么传送json数据 4、ajax传递json,然后服务器接受j

2023-12-08
包含python返回json函数的词条

本文目录一览: 1、Python爬虫(七)数据处理方法之JSON 2、【Python】浅谈python中的json 3、如何使用 Python 得到网页返回正确的 Json 数据 4、python r

2023-12-08
包含cdnjsnet的词条

本文目录一览: 1、webpack使用HtmlWebpackPlugin进行cdn配置 2、优酷前端如何处理后端返回的切片视频流? 3、为什么需要使用及如何使用CDN 4、JS实现的将html转为pd

2023-12-08
包含exjshotel源码的词条

本文目录一览: 1、求一个记事本的JAVA源代码 2、C++控制台程序如何把外部参数赋值给变量。求源码。如: 外部执行 test.ex 3、2016年旅游网站源码排行榜 4、在dedecms项目源码中

2023-12-08
包含python往json里添加数据的词条

本文目录一览: 1、【Python】浅谈python中的json 2、在python3中怎么对json对象写进数据 3、Python如何追加JSON文件里的内容? 4、Python爬虫(七)数据处理方

2023-12-08
包含javascript读写json的词条

本文目录一览: 1、js 读取 json文件 2、如何在javascript中读取本地的json格式文本文件 3、php,JavaScript 如何读取并修改json文件? 4、js怎样读取json里

2023-12-08
包含cdnbootstrap.min.js的词条

本文目录一览: 1、Bootstrap免费 CDN 加速服务/Bootstrap文件怎么引入 2、bootstrap怎么快速使用 3、bootstrap 导航条下拉菜单点击无反应? 4、怎么在页面里引

2023-12-08
包含javajsondatabind的词条

本文目录一览: 1、json中包含json数组怎么转换成java对象 2、如何用java递归生成带children的json串 3、java怎么处理json格式数据 4、java怎么得到json中的数

2023-12-08
包含javascriptjson转义字符的词条

本文目录一览: 1、如何在js中去掉json数据中的转义附 2、js解析json字符串报错解决方案(带有转义字符的json字符串) 3、json字符串中需要转义的字符有哪些 如何在js中去掉json数

2023-12-08