@wenshao 大师你好,想跟你请教个问题:
fastjson,我知道是您的杰作,有个小问题,就是JSON解析类的时候怎么阻止生成的json串按字母排序。
下面是生成的json串,{"age":"aa","sex":"nnn","name":"dsjkd"}
但是我的类里顺序不是这样的,貌似默认按字母进行了属性排序,怎么取消呢?
//为true按照put顺序排序,为false时安装默认排序 JSONObject jsonObj = new JSONObject(true); jsonObj.put("code",ret.getCode()); jsonObj.put("msg", ret.getMsg()); jsonObj.put("data", ret.getData()); String jsonStr = jsonObj.toString();
JSONObject.toJSONString(json, SerializerFeature.SortField)
暂时忙其他的了,没有怎么来论坛了呵呵
????无果而终么???
您能给我个详细点的demo吗,这个我不知道怎么启用。
SerializerFeature.SortField不要启用
我应用的场景是,json数据按一定顺序排序然后进行加密处理作为验证字段,返回给其他人使用,如果自动排序加密后就不对了。
回复这样的话,你能不能把这个类的toString方法重写一下,然后按照你要的顺序排处理,要加密前,toString一个字符串出来拿去加密
回复我和你遇到过同样的问题,解决是把加密前的字符串和加密后的给它就可以 。他人使用不需要再拼加密前的字符串
回复哦哦 我理解错了,明白你的意思了
回复您的意思是说JSON类会调用toString的方法?
能说一下你的使用场景吗?就是和这个顺序有关系的场景。
这个问题我遇到过,需要修改fastjson的源码,设置里面的一个参数,具体我忘了,需要再查一下源码
希望你能找到答案,我现在特别纠结这事。
调顺序了,但是没变,百度过,有人建议用toJSONString(Object object, SerializeConfig config, SerializerFeature... features),好像也没起到作用,不知道是不是我用错了
定义类的时候调换字段顺序看json是不是也变了
那你能解决不安字母排序的问题吗?
你的答案完美的解决了我的问题,非常感谢
缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。
public static class VO { @JSONField(ordinal = 3) private int f0; @JSONField(ordinal = 2) private int f1; @JSONField(ordinal = 1) private int f2; }
3Q
你和我碰到的问题是一样的,可以使用注解设置排序规则,,,,如下
package com.zx.nptower.api.bean;
import com.alibaba.fastjson.annotation.JSONField;import com.alibaba.fastjson.annotation.JSONType;
// 设置排序规则@JSONType(orders={"user_name","passwd"})
public class LoginBean {// 设置别名user_name@JSONField(name="user_name")private String userName; // 账户private String passwd; // 密码
public LoginBean(){
}
public String getUserName(){return this.userName;}
public void setUserName(String user_name){this.userName = user_name;}
public String getPasswd(){return this.passwd;}
public void setPasswd(String passwd){this.passwd = passwd;}}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(21)
暂时忙其他的了,没有怎么来论坛了呵呵
????无果而终么???
您能给我个详细点的demo吗,这个我不知道怎么启用。
SerializerFeature.SortField
不要启用
我应用的场景是,json数据按一定顺序排序然后进行加密处理作为验证字段,返回给其他人使用,如果自动排序加密后就不对了。
回复
这样的话,你能不能把这个类的toString方法重写一下,然后按照你要的顺序排处理,要加密前,toString一个字符串出来拿去加密
回复
我和你遇到过同样的问题,解决是把加密前的字符串和加密后的给它就可以 。他人使用不需要再拼加密前的字符串
回复
哦哦 我理解错了,明白你的意思了
回复
您的意思是说JSON类会调用toString的方法?
能说一下你的使用场景吗?就是和这个顺序有关系的场景。
这个问题我遇到过,需要修改fastjson的源码,设置里面的一个参数,具体我忘了,需要再查一下源码
希望你能找到答案,我现在特别纠结这事。
调顺序了,但是没变,百度过,有人建议用toJSONString(Object object, SerializeConfig config, SerializerFeature... features),好像也没起到作用,不知道是不是我用错了
定义类的时候调换字段顺序看json是不是也变了
那你能解决不安字母排序的问题吗?
你的答案完美的解决了我的问题,非常感谢
5. 使用ordinal指定字段的顺序
缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。
3Q
你和我碰到的问题是一样的,可以使用注解设置排序规则,,,,如下
package com.zx.nptower.api.bean;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.annotation.JSONType;
// 设置排序规则
@JSONType(orders={"user_name","passwd"})
public class LoginBean {
// 设置别名user_name
@JSONField(name="user_name")
private String userName; // 账户
private String passwd; // 密码
public LoginBean()
{
}
public String getUserName()
{
return this.userName;
}
public void setUserName(String user_name)
{
this.userName = user_name;
}
public String getPasswd()
{
return this.passwd;
}
public void setPasswd(String passwd)
{
this.passwd = passwd;
}
}