[alibaba/fastjson]请教个问题:com.alibaba.fastjson.JSONException: syntax error, expect {, actual [, pos 94,

2025-11-11 422 views
2

Android开发。。。为啥报这个异常呢?请问我这哪里不对吗?如何解决这个问题呢? try{ AppMessage message = JSON.parseObject(json, AppMessage.class); ...... } catch (Exception e){ e.printStackTrace(); }

AppMessage 如下: private String type; private String code; private String content; private JSONObject data;

后台返回的json字符串如下(这个json会报标题的异常,还有个json不会报异常的贴在最下面):

{
    "type": "success",
    "code": "10000",
    "content": "成功",
    "anchor": "undefined",
    "errorFields": [],
    "data": [{
        "pack_quantity": 1.00,
        "memo": "",
        "modify_date": 1520992993000,
        "creater": null,
        "stock_in": 61,
        "insttu": "60020",
        "pack_capacity": 10.00,
        "product": 14,
        "id": 70,
        "modifier": null,
        "amount": 200.00,
        "buy_detail": 103,
        "price": 20.00,
        "create_date": 1520992993000,
        "quantity": 10.00,
        "produce_date": null
    }, {
        "pack_quantity": 20.00,
        "memo": "",
        "modify_date": 1520992993000,
        "creater": null,
        "stock_in": 61,
        "insttu": "60020",
        "pack_capacity": 1.00,
        "product": 62,
        "id": 71,
        "modifier": null,
        "amount": 220.00,
        "buy_detail": 104,
        "price": 11.00,
        "create_date": 1520992993000,
        "quantity": 20.00,
        "produce_date": null
    }]
}

下面这种就不会报异常。。。。

{
    "type": "success",
    "code": "10000",
    "content": "成功",
    "anchor": "undefined",
    "errorFields": [],
    "data": {
        "content": [{
            "id": 61,
            "insttu": "60020",
            "modify_date": 1520992993000,
            "stock_in_date": 1520956800000,
            "stock_in_no": "S8000600010",
            "amount": 420.00,
            "memo": "",
            "status": 1,
            "name": "大地经销商",
            "statuStr": "待确认",
            "dateStr": "2018-03-14"
             },
                     ......
                ],
                .......
           }
}

回答

6

改为JSONArray试试呢

8

感谢您的回复!改为JSONArray 是可以解析的。但是呢,我这边是这样设计的,整个项目中,只有AppMessage类,其中 JSONObject data是用来接收任意类型的数据。

5

最好进行统一哦,比如data必须是object而非array,如果需要接受array,则将array包装在data下的字段中

7

嗯。谢谢

2

最好进行统一哦,比如data必须是object而非array,如果需要接受array,则将array包装在data下的字段中 @cnlyml 个人觉得这种设计不太合理。

从命名上parseObject 中Object应该包括数组类型 从业务设计上,data是泛型很难约束下游返回一定是个对象,让业务设计写一堆难看的条件分支不是一个好的选择 此场景为偶发,使用者疏忽上线隐患很大 fastJson处理此问题是可行的 遇到此问题的人不在少数,从用户出发不是一个好的设计

@wenshao

7

我也觉得这样肯定会更好一些。但是现在架构基本上就拆分为parseObject和parseArray。但从范型转换来说,可以通过其他的方法实现这种自动根据数据解析Object或Array的功能。这样会更好一些。@wenshao

3

我也遇到这个问题了 在最新的1.2.73上 还是一样的错误,但同样的代码 有的电脑上又没问题 难道跟操作系统也有关系

3

parseObject和parseArray? 我也遇到了,真想自己写个解决它的jar包传到mvn上去名垂千史...

5

我也遇到这个问题了 在最新的1.2.73上 还是一样的错误,但同样的代码 有的电脑上又没问题 难道跟操作系统也有关系 我后来发现 是返回的JSON前面有特殊字符 UTF-8 BOM之类的 通过删除{或[前的字符来解决