包含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/zh-tw/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

發表回復

登錄後才能評論