当条目的顺序不断变化时,如何比较两个 JSON 字符串
2022-09-03 05:00:01
我有一个像 - 这样的字符串,我需要将其与生成的输出进行比较,但在生成的输出中,顺序不断变化,即有时它的其他时间是它。{"state":1,"cmd":1}
{"state":1,"cmd":1}
{"cmd":1,"state":1}
目前我正在使用方法来比较,在这种情况下,验证两个字符串可以更好的方法。我担心的只是两个条目都存在于字符串中,顺序不是imp。equals()
我有一个像 - 这样的字符串,我需要将其与生成的输出进行比较,但在生成的输出中,顺序不断变化,即有时它的其他时间是它。{"state":1,"cmd":1}
{"state":1,"cmd":1}
{"cmd":1,"state":1}
目前我正在使用方法来比较,在这种情况下,验证两个字符串可以更好的方法。我担心的只是两个条目都存在于字符串中,顺序不是imp。equals()
Jackson Json解析器有一个很好的功能,它可以将Json字符串解析为Map。然后,您可以查询条目或简单地询问相等性:
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.*;
public class Test
{
public static void main(String... args)
{
String input1 = "{\"state\":1,\"cmd\":1}";
String input2 = "{\"cmd\":1,\"state\":1}";
ObjectMapper om = new ObjectMapper();
try {
Map<String, Object> m1 = (Map<String, Object>)(om.readValue(input1, Map.class));
Map<String, Object> m2 = (Map<String, Object>)(om.readValue(input2, Map.class));
System.out.println(m1);
System.out.println(m2);
System.out.println(m1.equals(m2));
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出为
{state=1, cmd=1}
{cmd=1, state=1}
true
您还可以使用Gson API
JsonParser parser = new JsonParser();
JsonElement o1 = parser.parse("{\"state\":1,\"cmd\":1}");
JsonElement o2 = parser.parse("{\"cmd\":1,\"state\":1}");
System.out.println(o1.equals(o2));