包含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自定义游戏,通过改变规则实现快速刷经验条。经验条只是让宠物进化加速,只是加速而不是满条就可以进化。

原创文章,作者:简单一点,如若转载,请注明出处:https://www.506064.com/n/130233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
简单一点简单一点
上一篇 2024-10-03 23:28
下一篇 2024-10-03 23:28

相关推荐

  • Python中自定义函数必须有return语句

    自定义函数是Python中最常见、最基本也是最重要的语句之一。在Python中,自定义函数必须有明确的返回值,即必须要有return语句。本篇文章将从以下几个方面对此进行详细阐述。…

    编程 2025-04-29
  • Python自定义列表

    本文将为大家介绍Python中自定义列表的方法和应用场景。对自定义列表进行详细的阐述,包括列表的基本操作、切片、列表推导式、列表的嵌套以及列表的排序,希望能够帮助大家更好地理解和应…

    编程 2025-04-27
  • 如何添加Python自定义模块?

    Python是一种非常流行的脚本语言,因其易学易用和功能强大而备受欢迎。自定义模块是Python开发中经常使用的功能之一。本文将从多个方面为您介绍如何添加Python自定义模块。 …

    编程 2025-04-27
  • 高德自定义地图——多维度定制地图

    一、使用高德自定义地图的必要性 高德自定义地图是指用户可以在高德地图上按照自己的要求添加标注、修改道路、调整地图颜色等一系列操作,从而形成符合自己需求的地图,而这种地图是只有拥有者…

    编程 2025-04-24
  • COD晶体:强化软件开发的利器

    COD晶体是一种新型开发软件的工具,其全称为”Code On Demand Crystal”,即”按需编程晶体”。它是基于互联网的编…

    编程 2025-04-24
  • Qt 自定义控件详解

    一、Qt自定义控件简介 Qt是一种用于开发跨平台软件的应用程序框架,它提供了一组用于构建用户界面、网络应用程序和数据库等方面的工具。 Qt自定义控件是指在当前控件基础上进行一定修改…

    编程 2025-04-23
  • 如何使用Zotero自定义参考文献格式

    一、安装Zotero软件 Zotero是一款出色的参考文献管理软件,它可以帮助我们管理我们所有的参考文献。首先,我们需要在官方网站(https://www.zotero.org/)…

    编程 2025-04-23
  • Android 自定义属性详解

    一、自定义属性介绍 Android应用程序中通常会使用一些系统的属性来设置View或者Layout等组件的属性。但是,对于一些自定义的View或者Layout,系统的属性可能并不适…

    编程 2025-04-13
  • CSS自定义字体全面解析

    一、什么是CSS自定义字体 CSS自定义字体即使用@font-face规则,将外部字体文件引入到页面中,再通过CSS选择器将字体应用到对应文本上。通过自定义字体,可以使页面内容更加…

    编程 2025-04-12
  • Android自定义View详解

    一、自定义View基础 1、View的绘制流程 在了解自定义View之前,我们需要了解Android中View的绘制流程。View的绘制流程主要包括: (1)测量(onMeasur…

    编程 2025-04-02

发表回复

登录后才能评论