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/

10-14 10:38