Java REST API GET请求中JSONObject指定message字段排序问题
解决Java JSONObject字段顺序问题,让message字段排在最后
哦,这个问题我太熟了!之前也踩过同样的坑——默认的JSONObject(尤其是org.json包里的那个)底层是用HashMap实现的,而HashMap是无序的,完全不保证你插入键值对的顺序会和输出的顺序一致。所以不管你把put("message", "success")放在代码的哪个位置,最终JSON里的字段顺序都是由键的哈希值决定的,这就是为什么它总跑到中间去。
解决办法:用LinkedHashMap初始化JSONObject
LinkedHashMap会严格保留插入顺序,只要用它来初始化你的JSONObject,之后按你想要的顺序put字段,最终输出的JSON就会遵循这个顺序。
完整代码示例:
import org.json.JSONObject; import java.util.LinkedHashMap; public class RestResponseExample { public static void main(String[] args) { // 用LinkedHashMap初始化JSONObject,保证插入顺序 JSONObject reply = new JSONObject(new LinkedHashMap<>()); // 先添加所有其他字段 JSONObject userInfo = new JSONObject(); userInfo.put("id", 123); userInfo.put("name", "Alice"); reply.put("user", userInfo); reply.put("total", 5); reply.put("items", new String[]{"item1", "item2"}); // 最后添加message字段,它就会排在JSON的最后 reply.put("message", "success"); // 输出看看结果 System.out.println(reply.toString(4)); // 带缩进的格式化输出 } }
输出结果示例:
{ "user": { "id": 123, "name": "Alice" }, "total": 5, "items": [ "item1", "item2" ], "message": "success" }
这样就能完美实现你想要的效果,让message字段固定在所有其他字段的后面啦。
内容的提问来源于stack exchange,提问作者khan
相关产品推荐
相关产品推荐

