您当前的位置:首页 > 互联网教程

java-fastjson怎样使用自定义DateFormatDeserializer

发布时间:2025-05-23 11:30:27    发布人:远客网络

java-fastjson怎样使用自定义DateFormatDeserializer

一、java-fastjson怎样使用自定义DateFormatDeserializer

1、如何使用fastjson成功反序列如下json串?

2、显然,如果直接用Json.parseObject()方法进行反序列化,会报如下错误信息:

3、Exception in thread“main” com.alibaba.fastjson.JSONException: parse

4、enum com.netwaymedia.exhibition.nio.common.dto.Msg$StatusCodeEnum

5、com.alibaba.fastjson.parser.deserializer.EnumDeserializer.deserialze(EnumDeserializer.java:48)

6、com.alibaba.fastjson.parser.deserializer.DefaultFieldDeserializer.parseField(DefaultFieldDeserializer.java:33)

7、原因分析:前面已经提过,fastjson默认使用ordinal值去查找对应的枚举实例,显示是获取不到的,所以抛出异常,需要修改status值为0才运行OK。

8、如果使用JSON.toJSONString()方法对上述Msg对象进行序列化,会得到如下json串

9、显示不是我们所期待的原始字符串

10、答案就在于fastjson提供注解JSONField。通过JSONField可灵活控制字段的序列化和反序列,重新修改Msg结构如下:

11、 private StatusCodeEnum statusCode;

12、 public void setStatus(int code){

13、 this.statusCode= StatusCodeEnum.getEnum(code);

14、 public StatusCodeEnum getStatusCode(){

15、@JSONField(deserialize= false)

16、 public void setStatusCode(StatusCodeEnum statusCode){

17、 public static enum StatusCodeEnum{

18、 OK(200,"正常"), BAD_REQUEST(400,"服务器出错");

19、 private static final Map<Integer, StatusCodeEnum> CODE_MAP= new HashMap<Integer, StatusCodeEnum>();

20、 for(StatusCodeEnum typeEnum: StatusCodeEnum.values()){

21、 CODE_MAP.put(typeEnum.getCode(), typeEnum);

22、 StatusCodeEnum(int code, String meaning){

23、 public static StatusCodeEnum getEnum(Integer code){

24、 private final String meaning;

25、}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

26、思路是通过修改字段名为statusCode,并用JSONField注解该字段不进行序列和反序列化,但是提供getStatus/setStatus方法来定制化枚举变量statusCode的序列和反序列,完美的解决前面提到的两大问题。

27、这个方法我在网上还没看到过,是我自己尝试出来的,特别拿出来跟大家分享,不用谢,请叫我雷锋。

二、java xml转fastjson,转对象

fastjson是一个高性能的 Java JSON解析与生成库,由阿里巴巴团队开发。它提供了简洁高效的方式来处理 JSON数据。

fastjson的使用方法具体可以参考百度上的相关教程,网络上有多篇详细的使用指南。

在进行 Java XML转换时,可以利用 fastjson提供的工具类。以将 XML转换为 JSONObject为例,只需使用 fastjson的 JSONObject类来解析 XML格式的数据。具体步骤如下:

1.首先,需要导入 fastjson的相关 jar包到项目中。

2.然后,使用 XMLReader类的 fromXML方法将 XML字符串解析为 JSONObject。

3.最后,可以通过 JSONObject的相应方法访问或操作解析后的数据。

类似地,将 XML转换为 Java对象时,也可以利用 fastjson的工具类。主要步骤包括:

1.同样,需要确保 fastjson相关 jar包已正确导入。

2.使用 JSONObject的 get方法解析 XML中的数据。

3.通过解析后的 JSONObject,构建 Java对象。此过程通常需要使用到 Java的反射机制来创建和初始化对象。

总之,使用 fastjson进行 Java XML转换可以简化流程并提高效率。具体实现细节需根据实际需求调整。

三、复杂json怎么使用fastjson一次性提取出来

1、JSON数据之使用Fastjson进行解析(一)

2、据说FastJson是目前最快的解析Json数据的库,而且是国人开发出来的开源库。顶一下,付上官方网址:h/code.alibabatech.com/wiki/pages/viewpage.action?pageId=2424946

3、要使用Fastjson,首先需要下载相对应的jar文件,在官网即可下载。

4、附上初学的第一个例子,多多指教:

5、"text":"How do I stream JSON in Java?",

6、 public void setText(String text){

7、 public void setGeo(String geo){

8、 public UserBean getUserBean(){

9、 public void setUserBean(UserBean userBean){

10、 public void setName(String name){

11、 public int getFollowers_count(){

12、 public void setFollowers_count(int followers_count){

13、 this.followers_count= followers_count;

14、import java.io.FileInputStream;

15、import java.io.FileNotFoundException;

16、import javax.swing.text.BadLocationException;

17、import javax.swing.text.DefaultStyledDocument;

18、import javax.swing.text.rtf.RTFEditorKit;

19、import com.alibaba.fastjson.JSON;

20、import com.alibaba.fastjson.JSONArray;

21、import com.alibaba.fastjson.JSONObject;

22、"text":"How do I stream JSON in Java?",

23、 public static void main(String[] args){

24、 JsonBean bean= new JsonBean();

25、//把字符串转为Json对象,这是因为我的json数据首先是json对象

26、 JSONObject jobj= JSON.parseObject(bean.readRtf(new File("json.rtf")));

27、//然后是jsonArray,可以根据我的json数据知道

28、 JSONArray arr= jobj.getJSONArray("statuses");

29、//根据Bean类的到每一个json数组的项

30、 List<AllBean> listBeans= JSON.parseArray(arr.toString(), AllBean.class);

31、 for(AllBean bean_: listBeans){

32、//我这个demo的json数据获得第一层的数据

33、 System.out.println(bean_.getText());

34、 System.out.println(bean_.getId());

35、//我这个demo的json数据获得第二层的数据

36、 System.out.println(bean_.getUserBean().getFollowers_count());

37、//因为我把json数据放进rtf文件,这是读取rtf文件的json数据,转化为字符串

38、 public String readRtf(File in){

39、 dsd=new DefaultStyledDocument();

40、 rtf.read(new FileInputStream(in), dsd, 0);

41、 text= new String(dsd.getText(0, dsd.getLength()));

42、} catch(FileNotFoundException e){

43、// TODO Auto-generated catch block

44、// TODO Auto-generated catch block

45、} catch(BadLocationException e){

46、// TODO Auto-generated catch block