2016-08-10 14 views
0

こんにちは、私は下の2つのJSONを比較しようとしていますが、私のJavagsonと2つのjsonファイルを比較できませんか?

のコード
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" 
     } 
} 

私はまだ

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

が助けてください、問題に直面してJSON Error "java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $"

が、通過しました。

+0

したがって、問題は「Gson#fromJson」が何らかの例外を投げていることですか?たぶん、あなたはその質問を言い換えて、完全なスタックトレースを掲示することができます。 –

答えて

1

内部でC:\test1.jsonであるjson1の値は有効なJSONではなく、json2でも同様です。彼らはのファイル名のように見えます。には JSONが含まれています。もしそうなら、あなたはどちらかを行う必要があります。

  • は、(それぞれ)おそらく途中でStringBuilderまたはCharBufferなどの他のタイプを通過、Stringにファイル、および.fromJsonにそのStringを渡すの内容を読みます

  • は、ファイルの内容を読み取りReaderを作成し、その代わりに(String,Type)一方の.fromJson(Reader,Type)方法にそれを渡します。ファイル内のデータがJVMのデフォルトのエンコーディング(およびあなたの例のようなASCIIのみのデータはJVMのデフォルトとして使用されるすべてのエンコーディングと互換性があります)にある場合、FileReaderが適しており、ファイル名はnew FileReader(String) as documented here深刻なまたはより大きなプログラムで

あなたはcloseFileReader、またはリソースを占有を避けるためにそれを使用した後、FileInputStreamのようなファイルを読み取る他の方法に注意する必要があります。 Java8を仮定すると、通常これを行う最も便利な方法はtry-with-resourcesです。

+0

はいあなたの権利私はそれを理解するために愚かな間違いをしました。 –

関連する問題