【问题标题】:Reading .json file - BOM issue?读取 .json 文件 - BOM 问题?
【发布时间】:2014-07-18 10:39:38
【问题描述】:

我需要读取一个 .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 和许多其他关于它的东西,但我似乎找不到任何解决我的问题的方法。我能做什么?

【问题讨论】:

  • 你在使用this JSONObject API吗?它没有文件路径构造函数。

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


【解决方案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);

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

【讨论】:

  • 这是真的,我的错。我已经修好了。但是,我仍然有同样的错误。编辑:固定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多