无法将两个json文件与GSON进行比较

时间:2016-08-10 10:31:22

标签: java json gson

我正在尝试比较两个JSON字符串。下面是我在Java中的代码:

String json1 = "C:\\test1.json";
String json2 = "C:\\test2.json";

Gson g = new Gson();
Type mapType = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> firstMap = g.fromJson(json1, mapType);
Map<String, Object> secondMap = g.fromJson(json2, mapType);
System.out.println(Maps.difference(firstMap, secondMap));

以下是我的JSON文件格式

我的Json 1

{
    "00601":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        },
    "00602":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        },
    "00603":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        }
}

我的Json 2

{
    "00601":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        },
    "00602":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        },
    "00603":{
        "type":"zipcode",
        "assignment":"South Monroe, MI"
        }
}

我已经完成了JSON Error "java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $"

但仍面临这个问题:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING

1 个答案:

答案 0 :(得分:1)

内部为json1的{​​{1}}的值不是有效的JSON,对C:\test1.json也是如此。它们看起来像包含 JSON 的文件的名称。如果是这样,您需要:

  • 将(每个)文件的内容读入json2,可能会通过其他类型,例如StringStringBuilder方式,并将CharBuffer传递给String

  • 创建一个.fromJson来读取文件的内容,并将其传递给Reader方法而不是.fromJson(Reader,Type)方法;如果文件中的数据与JVM的默认编码相同(并且仅ASCII数据,例如您的示例与用作JVM默认值的所有编码兼容),那么(String,Type)适用于此可以使用new FileReader(String) as documented here

  • 的文件名构建

在严重或较大的程序中,您应该谨慎使用FileReader close或其他方法(如FileReader读取文件,以避免占用资源。假设Java8,FileInputStream通常是最方便的方法。