阅读.json文件 - BOM问题?

时间:2014-07-18 10:39:38

标签: java json utf-8 byte-order-mark

我需要读取.json文件并在运行时更改字段。

问题出在我试图阅读时:

JSONObject jOb=null;


        try {
            jOb = new JSONObject(filePath);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println(jOb.toString());
        try {
            jOb.put("responseType", "TESTicles");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println(""+jOb);

我收到以下错误:“JSONObject文本必须以'{'为1 [字符2第1行]开头”

我认为问题可能是BOM标记,因为我的文件以'{'

开头

这是一个示例(我的json文件的开头):

{
  "base":{    
    "sites":{
      "local":{
        "name":"siteA",
        "datasource":{
...

我需要删除BOM标记才能读取文件但是如何在不读取文件的情况下执行此操作?

我读过:

Thisthis以及其他许多相关内容,但我似乎无法找到解决问题的方法。我该怎么办?

1 个答案:

答案 0 :(得分:1)

假设您使用的是library defined at json.org,您的代码所做的就是将文件名视为JSON字符串,并尝试将其解释为JSON对象。

阅读文档时,您需要将文件作为输入流打开,将其作为参数传递给JSONTokener构造函数,该构造函数作为参数传递给JSONObject构造函数,如:

InputStream foo = new FileInputStream(filePath);
JSONTokener t = new JSONTokener(foo);
JSONObject obj = new JSONObject(t);

注意:以上未经测试甚至编译过。