java-fastjson怎样使用自定义DateFormatDeserializer
发布时间:2025-05-23 11:30:27 发布人:远客网络
一、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