String json = "{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}";
try {
JSONObject jsonObject = JSONObject.fromObject(json);
String name = jsonObject.getString("name");
String address = jsonObject.getString("address");
System.out.println("name is:" + name);
System.out.println("address is:" + address);
JSONArray jsonArray = jsonObject.getJSONArray("array");
for (int i = 0; i < jsonArray.size(); i++) {
System.out.println("item " + i + " :" + jsonArray.getString(i));
}
} catch (JSONException e) {
e.printStackTrace();
}
一切都好。
但是,当我将
{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}
放入文件中时。 File file = new File(fileName);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
while ((tempString = reader.readLine()) != null){
JSONObject jo = JSONObject.fromObject(tempString.trim());
String id = jo.getString("id");
String name = jo.getString("name");
log.info(id + ":" + name);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
它告诉我
Exception in thread "main" net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of "{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}
。这段代码有什么问题?有什么可以为我解决的吗?谢谢。我的档案:
{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'address':'York'}
最佳答案
从评论:
我用
InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName), "UTF-8");
reader = new BufferedReader(isr);
String tempString = null;
while ((tempString = reader.readLine()) != null){
,并且我的文件以
EE BB BF
开头,已检查。问题是文件以BOM开头。 JSON解码器希望文件以可以开始JSON类型但开始获取U + FEFF的字符开头。
最好是JSON文件不以BOM表开头。
如果必须处理这种情况,则可以使用缓冲区:
BufferedReader buf = new BufferedReader(isr);
// remove BOM
buf.mark(1);
if(buf.read() != '\uFEFF') {
buf.reset();
}
// continue...
关于java - 无法解析jsonobject ----“JSONObject文本必须在的字符1处以'{'开头,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24926739/