У меня есть файл в формате JSON. Анализатор Gson аварийно завершает работу, когда в нем встречается пробел, как в State = "West Virginia", но он может анализировать "West-Virginia", где заменяется пустой символ. Я использую BufferedReader
в Java.
Но если я передаю ту же строку в жестком коде, синтаксический анализатор работает.
import java.io.* ;
import com.google.gson.*;
public class gson_test {
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
BufferedReader br2 = null ;
String jsonStr = "[{month = august, weather:clear}, [333] , {addr : {place = {city = city_name, county : its_name}, state = \"West Virginia\" } } ]" ;
// System.out.printf("json-str : %s \n", jsonStr);
GsonParseStr(jsonStr, (JsonElement) null );
try {
String file2read_json = "c:\\enter\\filename\\here";
br2 = new BufferedReader(new FileReader(file2read_json));
// https://sites.google.com/site/gson/gson-user-guide#TOC-Array-Examples
Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
Object obj2 = gson.fromJson(br2, Object.class); // parses json-str into an object
GsonParseStr(obj2.toString(), (JsonElement) null );
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br2 != null) {
br2.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
static void GsonParseStr(String jsonStr, JsonElement elem) {
JsonParser parser2 = new JsonParser();
elem = parser2.parse(jsonStr); // this stmt crashes for the blank char
System.out.printf("parse str : %s \n", jsonStr);
}
}
Содержимое моего файла:
[{month = august, weather:clear}, [333] , {addr : {place = {city = city_name, county : its_name}, state = "West.Virginia" } } ]
Если я изменю «West.Virginia» на «West Virginia», программа вылетает.
Файл должен анализироваться так же, как «содержимое файла в виде необработанной строки».
PS: Как предлагает JPinzon, мне нужны цитаты вокруг (Западная Вирджиния) в файле, который у меня был. Но они должны быть в дальнейшем сбежали. Таким образом: (штат: «Западная Вирджиния») не подойдет; так и должно быть (штат: "\" Западная Вирджиния \ ""). При желании ключ State может иметь двойные кавычки, но это не обязательно.