如何取消fastjson的属性排序

发布于 2021-12-01 06:49:09 字数 315 浏览 1001 评论 21

@wenshao 大师你好,想跟你请教个问题:

    fastjson,我知道是您的杰作,有个小问题,就是JSON解析类的时候怎么阻止生成的json串按字母排序。

下面是生成的json串,
{"age":"aa","sex":"nnn","name":"dsjkd"}

但是我的类里顺序不是这样的,貌似默认按字母进行了属性排序,怎么取消呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(21

陌上芳菲 2021-12-05 11:33:58
//为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();

冷弦 2021-12-05 11:33:58
JSONObject.toJSONString(json, SerializerFeature.SortField)
顾忌 2021-12-05 11:33:57

暂时忙其他的了,没有怎么来论坛了呵呵

坚持沉默 2021-12-05 11:33:56

????无果而终么???

掩饰不了的爱 2021-12-05 11:33:54

您能给我个详细点的demo吗,这个我不知道怎么启用。

泪冰清 2021-12-05 11:33:53

SerializerFeature.SortField
不要启用

拍不死你 2021-12-05 11:33:52

我应用的场景是,json数据按一定顺序排序然后进行加密处理作为验证字段,返回给其他人使用,如果自动排序加密后就不对了。

奢望 2021-12-05 11:33:49

回复
这样的话,你能不能把这个类的toString方法重写一下,然后按照你要的顺序排处理,要加密前,toString一个字符串出来拿去加密

带上头具痛哭 2021-12-05 11:33:48

回复
我和你遇到过同样的问题,解决是把加密前的字符串和加密后的给它就可以 。他人使用不需要再拼加密前的字符串

野心澎湃 2021-12-05 11:33:48

回复
哦哦 我理解错了,明白你的意思了

醉生梦死 2021-12-05 11:33:48

回复
您的意思是说JSON类会调用toString的方法?

夜无邪 2021-12-05 11:33:47

能说一下你的使用场景吗?就是和这个顺序有关系的场景。

各自安好 2021-12-05 11:33:45

这个问题我遇到过,需要修改fastjson的源码,设置里面的一个参数,具体我忘了,需要再查一下源码

复古式 2021-12-05 11:33:45

希望你能找到答案,我现在特别纠结这事。

居里长安 2021-12-05 11:33:43

调顺序了,但是没变,百度过,有人建议用toJSONString(Object object, SerializeConfig config, SerializerFeature... features),好像也没起到作用,不知道是不是我用错了

羁拥 2021-12-05 11:33:40

定义类的时候调换字段顺序看json是不是也变了

爱的故事 2021-12-05 11:33:39

那你能解决不安字母排序的问题吗?

掩饰不了的爱 2021-12-05 11:33:35

你的答案完美的解决了我的问题,非常感谢

三月梨花 2021-12-05 10:44:19

5. 使用ordinal指定字段的顺序

缺省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;
}
苍暮颜 2021-12-04 23:26:59

你和我碰到的问题是一样的,可以使用注解设置排序规则,,,,如下

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;
}
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文