两个字符串数组对象需要进行比较是否相等,怎么把两个字符串对象保持顺序一致进行比较?
A字符串对象:
[
{
"Field":"id",
"Type":"int(11)",
"Null":"NO",
"Extra":"auto_increment",
"Key":"PRI"
},
{
"Field":"app_id",
"Type":"varchar(8)",
"Null":"YES",
"Extra":"",
"Key":""
}
]
B字符串对象:
[
{
"Field":"id",
"Type":"int(11)",
"Null":"NO",
"Key":"PRI",
"Extra":"auto_increment"
},
{
"Field":"app_id",
"Type":"varchar(8)",
"Null":"YES",
"Key":"",
"Extra":""
}
]
A字符串对象和B字符串对象的Key和Extra键值顺序不一样,不能直接比较,怎么实现B的顺序和A的一样呢?
如果是希望最终比较字符串,可以先处理一下原字符串:重新按照一定规则排列对象的key,比如题主前面说的:
要实现的效果就是将A和B的所有键都按字母顺序排序一遍,怎么实现?
核心原理就是用TreeMap保证对象的key按照字典升序排列
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
String A = "[\n" +
" {\n" +
" \"Field\":\"id\",\n" +
" \"Type\":\"int(11)\",\n" +
" \"Null\":\"NO\",\n" +
" \"Extra\":\"auto_increment\",\n" +
" \"Key\":\"PRI\"\n" +
" },\n" +
" {\n" +
" \"Field\":\"app_id\",\n" +
" \"Type\":\"varchar(8)\",\n" +
" \"Null\":\"YES\",\n" +
" \"Extra\":\"\",\n" +
" \"Key\":\"\"\n" +
" }\n" +
"]";
String B = "[\n" +
" {\n" +
" \"Field\":\"id\",\n" +
" \"Type\":\"int(11)\",\n" +
" \"Null\":\"NO\",\n" +
" \"Key\":\"PRI\",\n" +
" \"Extra\":\"auto_increment\"\n" +
" },\n" +
" {\n" +
" \"Field\":\"app_id\",\n" +
" \"Type\":\"varchar(8)\",\n" +
" \"Null\":\"YES\",\n" +
" \"Key\":\"\",\n" +
" \"Extra\":\"\"\n" +
" }\n" +
"]";
String sortedKeyA = sortedKeyArray(JSON.parseArray(A));
String sortedKeyB = sortedKeyArray(JSON.parseArray(B));
System.out.println(sortedKeyA);
System.out.println("---------------------------");
System.out.println(sortedKeyB);
}
private static String sortedKeyArray(JSONArray array) {
List<Map<String, Object>> list = new ArrayList<>();
for (Object o : array) {
JSONObject json = JSON.parseObject(JSON.toJSONString(o));
Map<String, Object> sortedKeyMap = new TreeMap<>(json);
list.add(sortedKeyMap);
}
return JSON.toJSONString(list, JSONWriter.Feature.PrettyFormat);
}
}
输出结果:
如果按字符串比较,那确实是不一样的,比如key的顺序,格式化后空格的多少等都会导致不一样。
如果不考虑这些,只考虑数据,那么可以使用jackson、gson、fastjson等工具将内容读取成对象或者map,比较对象或者map即可。
如果有用,望采纳,谢谢!
不能直接对两个字符串对象所有键值代表的字符串直接比较吗,这样就按键来,不用考虑顺序了
谢邀。
直接把 json 序列化解析成 a,b 两个对象,通过重写 equals 方法,来比较 a,b 两个对象的键(key)对应的值是不是一样的就行了呀。别忘了重新 hashcode 方法哦。
如果全部值都是一样的,就可以认为是一样的了。
不知道你这个问题是否已经解决, 如果还没有解决的话: