java - 无法解析 jsonobject--- -"A JSONObject text must begin with ' {' at character 1 of "

标签 java json

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();  
        } 

它告诉我线程“main”中的异常net.sf.json.JSONException:JSONObject文本必须以“{”在“{'name':'Tom','array'的字符1处以'{'开头: [{'a':'111','b':'222','c':'333'},{},{'a':'999'}],'地址':'约克'}。这段代码有什么问题?谁能帮我解决一下吗?谢谢。

我的文件:

{'name': 'Tom','array':[{'a':'111','b':'222','c':'333'},{},{ 'a':'999'}],'地址':'约克'}

最佳答案

来自评论:

I use

InputStreamReader isr = new InputStreamReader(new FileInputStream(fileName), "UTF-8");
reader = new BufferedReader(isr);
String tempString = null;
while ((tempString = reader.readLine()) != null){

, and my file starts with EE BB BF, I've checked.

问题是该文件以 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--- -"A JSONObject text must begin with ' {' at character 1 of ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24926739/

相关文章:

java - 服务已经在运行,但它不应该在使用后台服务代码的位置

java - 如何在 Android 中绘制自定义图形?

javascript - angularjs - $http 读取 json 并等待回调

android - 如何使用 gson 在 json 现有结构中再插入一项?

android - 如何在不使用 GSON 或 android 中的任何其他库的情况下使用改造以字符串形式获得响应

java - 如何在Gradle中使用初始化脚本配置jacocoTestReport

java - jar 策略文件

java - JSON 编码字符串的键是什么

javascript - 在 Leaflet Map 中单击时,首先加载标记,然后加载每个弹出窗口的数据

javascript - 如何避免在刷新时重置本地存储中的 JSON 对象?