我有一个JSON格式的文件。 Gson解析器在遇到空白时会崩溃,例如State =“ West Virginia”,但是它可以解析替换了空白字符的“ West-Virginia”。我在Java中使用BufferedReader
。
但是,如果我通过相同的字符串进行硬编码,则解析器将起作用。
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所建议,我确实在文件中的(西弗吉尼亚州)周围加了引号。但是它们必须进一步逃脱。因此:(州:“西弗吉尼亚州”)不会这样做;应该是(州:“ \” West Virginia \“”)。可选地,键“ State”可以在其周围带有双引号,但这是可选的。
答案 0 :(得分:1)
尝试将JSON修复为此:
[{"month":"august", "weather":"clear"}, [333], {"addr":{"place":{"city":"city_name", "county":"its_name"}, "state":"West Virginia"}}]
...或格式良好:
[
{
"month":"august",
"weather":"clear"
},
[
333
],
{
"addr":{
"place":{
"city":"city_name",
"county":"its_name"
},
"state":"West Virginia"
}
}
]
答案 1 :(得分:0)
如果您进行调试,您将看到字符串obj2.toString()
不包含“西弗吉尼亚州”周围的引号,因为gson.fromJson(br2, Object.class)
在解析时已将其删除。这就是它崩溃的原因。
为避免此错误,您可以尝试在文件中添加转义引号,例如state = "\"West Virginia\""