2016-08-10 1 views
0

Привет я пытаюсь сравнить два JSON ниже мой код в JavaНе удалось сравнить два json-файла с gson?

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 

пожалуйста, помогите.

+0

Итак, проблема: «Gson # fromJson» бросает какое-то исключение? Может быть, вы могли бы перефразировать вопрос и опубликовать полный стек. –

ответ

1

Значение json1, которое является C:\test1.json внутренним, недействительным JSON, и аналогичным образом для json2. Они выглядит как имена файлов, которые содержат JSON. Если да, то вам нужно либо:

  • читать содержание из (каждый файл) в String, возможно, пройдя через другие типы как StringBuilder или CharBuffer на пути, и передать String в .fromJson

  • создать Reader, который считывает содержимое файла, и передать в .fromJson(Reader,Type) метод вместо (String,Type) один; если данные в файле находятся или совместимы со стандартным кодированием JVM (а данные ASCII, такие как ваш пример, совместимы со всеми кодировками, используемыми в качестве значений по умолчанию JVM), то FileReader подходит для этого и может быть создан из имени файла с new FileReader(String) as documented here

в серьезной или более крупной программы, вы должны быть осторожны, чтобы closeFileReader или другой метод чтения файла вроде FileInputStream, после ее использования, чтобы избежать связывания ресурсов. Предполагая, что Java8, try-with-resources, как правило, наиболее удобный способ сделать это.

+0

Да, вы правы, я сделал глупую ошибку, чтобы понять это. –

Смежные вопросы