eclipse bug(二)json字符串转json对象

Exception in thread "main" com.alibaba.fastjson.JSONException: exepct '[', but {, type : class com.ebao.pojo.DataPoints
at com.alibaba.fastjson.parser.deserializer.ArrayListTypeFieldDeserializer.parseArray(ArrayListTypeFieldDeserializer.java:104)
at com.alibaba.fastjson.parser.deserializer.ArrayListTypeFieldDeserializer.parseField(ArrayListTypeFieldDeserializer.java:53)
at com.alibaba.fastjson.parser.deserializer.ASMJavaBeanDeserializer.parseField(ASMJavaBeanDeserializer.java:74)
at com.alibaba.fastjson.parser.deserializer.ASMJavaBeanDeserializer$InnerJavaBeanDeserializer.parseField(ASMJavaBeanDeserializer.java:86)
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:330)
at com.alibaba.fastjson.parser.deserializer.ASMJavaBeanDeserializer.parseRest(ASMJavaBeanDeserializer.java:100)
at Fastjson_ASM_DataPoints_1.deserialze(Unknown Source)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:635)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:571)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:566)
at com.alibaba.fastjson.JSON.parseArray(JSON.java:348)

at com.ebao.convert.Convert.main(Convert.java:82)

  1. 描述你的问题
    怎么解析这字符串:

[
    {
        "id": 1,
        "name": "Tony老师聊shell——环境变量配置文件",
        "picSmall": "http://img.mukewang.com/55237dcc0001128c06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/55237dcc0001128c06000338.jpg",
        "description": "为你带来shell中的环境变量配置文件",
        "learner": 12312
    },
    {
        "id": 2,
        "name": "数学知识在CSS动画中的应用",
        "picSmall": "http://img.mukewang.com/55249cf30001ae8a06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/55249cf30001ae8a06000338.jpg",
        "description": "数学知识与CSS结合实现酷炫效果",
        "learner": 45625
    },
    {
        "id": 3,
        "name": "Oracle数据库开发必备利器之PL/SQL基础",
        "picSmall": "http://img.mukewang.com/5523711700016d1606000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/5523711700016d1606000338.jpg",
        "description": "Oracle数据库高级开发必备的基础。",
        "learner": 41236
    },
    {
        "id": 4,
        "name": "Android见证消息推送时刻进阶篇",
        "picSmall": "http://img.mukewang.com/551e470500018dd806000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/551e470500018dd806000338.jpg",
        "description": "Android消息推送就在眼前,Come on",
        "learner": 45456
    },
    {
        "id": 5,
        "name": "Avalon探索之旅基础教程——复杂绑定",
        "picSmall": "http://img.mukewang.com/551de0570001134f06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/551de0570001134f06000338.jpg",
        "description": "前端迷您MVVM框架,Avalon复杂绑定属性篇。",
        "learner": 56556
    },
    {
        "id": 6,
        "name": "Android-Service系列之断点续传下载",
        "picSmall": "http://img.mukewang.com/552640c300018a9606000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/552640c300018a9606000338.jpg",
        "description": "想升职加薪么?本章课程你值得拥有",
        "learner": 48996
    },
    {
        "id": 7,
        "name": "JUnit—Java单元测试必备工具",
        "picSmall": "http://img.mukewang.com/551b92340001c9f206000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/551b92340001c9f206000338.jpg",
        "description": "Java单元测试利器!",
        "learner": 13210
    },
    {
        "id": 8,
        "name": "细说Java多线程之内存可见性",
        "picSmall": "http://img.mukewang.com/5518c3d7000175af06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/5518c3d7000175af06000338.jpg",
        "description": "用两种方式实现内存可见性",
        "learner": 15051
    },
    {
        "id": 9,
        "name": "CSS动画实用技巧",
        "picSmall": "http://img.mukewang.com/551b98ae0001e57906000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/551b98ae0001e57906000338.jpg",
        "description": "教你使用CSS实现惊艳的动画效果!",
        "learner": 15210
    },
    {
        "id": 10,
        "name": "C++远征之起航篇",
        "picSmall": "http://img.mukewang.com/550b86560001009406000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/550b86560001009406000338.jpg",
        "description": "C++亮点尽在其中",
        "learner": 84545
    },
    {
        "id": 11,
        "name": "Tony老师聊shell——运算符",
        "picSmall": "http://img.mukewang.com/551916790001125706000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/551916790001125706000338.jpg",
        "description": "Tony为你带来shell编程中的运算符!",
        "learner": 18411
    },
    {
        "id": 12,
        "name": "如何使用高德云图在线制作属于你的地图",
        "picSmall": "http://img.mukewang.com/5518ecf20001cb4e06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/5518ecf20001cb4e06000338.jpg",
        "description": "教你迅速使用云图进行基于LBS的开发。",
        "learner": 56432
    },
    {
        "id": 13,
        "name": "鬼斧神工之正则表达式",
        "picSmall": "http://img.mukewang.com/5518bbe30001c32006000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/5518bbe30001c32006000338.jpg",
        "description": "正则表达式是计算机编程语言界的鬼斧神工。",
        "learner": 25210
    },
    {
        "id": 14,
        "name": "如何使用高德Windows Phone SDK进行基于LBS的开发",
        "picSmall": "http://img.mukewang.com/551380400001da9b06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/551380400001da9b06000338.jpg",
        "description": "教你迅速使用WP SDK进行基于LBS的开发",
        "learner": 56445
    },
    {
        "id": 15,
        "name": "canvas实现星星闪烁特效",
        "picSmall": "http://img.mukewang.com/550a33b00001738a06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/550a33b00001738a06000338.jpg",
        "description": "使用HTML5实现轮播图片上的序列帧。",
        "learner": 45658
    },
    {
        "id": 16,
        "name": "如何使用高德JS-API进行基于LBS的开发",
        "picSmall": "http://img.mukewang.com/5513a1b50001752806000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/5513a1b50001752806000338.jpg",
        "description": "教你迅速用高德JS-API进行基于LBS的开发",
        "learner": 15222
    },
    {
        "id": 17,
        "name": "Duang~MySQLi扩展库来袭",
        "picSmall": "http://img.mukewang.com/5513e20600017c1806000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/5513e20600017c1806000338.jpg",
        "description": "Duang~一起开启MySQLi的学习之旅吧!",
        "learner": 46321
    },
    {
        "id": 18,
        "name": "如何使用高德Android SDK进行基于LBS的开发",
        "picSmall": "http://img.mukewang.com/550a78720001f37a06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/550a78720001f37a06000338.jpg",
        "description": "教你迅速使用Android SDK进行基于LBS的开发",
        "learner": 12130
    },
    {
        "id": 19,
        "name": "高德地图组件快速入门",
        "picSmall": "http://img.mukewang.com/550a836c0001236606000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/550a836c0001236606000338.jpg",
        "description": "教你迅速使用地图组件进行基于LBS的开发",
        "learner": 54540
    },
    {
        "id": 20,
        "name": "如何使用高德定位进行开发",
        "picSmall": "http://img.mukewang.com/550a87da000168db06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/550a87da000168db06000338.jpg",
        "description": "教你迅速使用定位进行基于LBS的开发",
        "learner": 45665
    },
    {
        "id": 21,
        "name": "Yahoo军规",
        "picSmall": "http://img.mukewang.com/530f0ef700019b5906000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/530f0ef700019b5906000338.jpg",
        "description": "做为WEB前端攻城师,您必须知道的网站性能优化规则。",
        "learner": 12123
    },
    {
        "id": 22,
        "name": "Ajax全接触",
        "picSmall": "http://img.mukewang.com/549bda090001c53e06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/549bda090001c53e06000338.jpg",
        "description": "由浅入深,循序渐进学习Ajax的相关概念、原理、实现方式和应用方法。",
        "learner": 46456
    },
    {
        "id": 23,
        "name": "jQuery源码解析(DOM与核心模块)",
        "picSmall": "http://img.mukewang.com/547d5a45000156f406000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/547d5a45000156f406000338.jpg",
        "description": "前端架构师的必经之路,揭开框架背后的秘密。",
        "learner": 51456
    },
    {
        "id": 24,
        "name": "用字体在网页中画ICON图标",
        "picSmall": "http://img.mukewang.com/54780ea90001f3b406000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/54780ea90001f3b406000338.jpg",
        "description": "图标恋上字体,就像老鼠爱上大米!",
        "learner": 16456
    },
    {
        "id": 25,
        "name": "CSS3绚丽照片墙",
        "picSmall": "http://img.mukewang.com/547ed1c9000150cc06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/547ed1c9000150cc06000338.jpg",
        "description": "简单CSS3属性轻松实现绚丽照片墙效果。",
        "learner": 26456
    },
    {
        "id": 26,
        "name": "SEO在网页制作中的应用",
        "picSmall": "http://img.mukewang.com/54214727000160e306000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/54214727000160e306000338.jpg",
        "description": "让您快速迈进SEO的门,不容错过!",
        "learner": 12436
    },
    {
        "id": 27,
        "name": "CSS深入理解之absolute",
        "picSmall": "http://img.mukewang.com/54125edc0001ce6306000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/54125edc0001ce6306000338.jpg",
        "description": "全面深入理解CSS的position:absolute声明。",
        "learner": 45345
    },
    {
        "id": 28,
        "name": "玩转KISSY框架",
        "picSmall": "http://img.mukewang.com/548165820001b4b006000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/548165820001b4b006000338.jpg",
        "description": "全网唯一系统讲解KISSY框架从入门到精通的教程。",
        "learner": 11456
    },
    {
        "id": 29,
        "name": "CSS深入理解之float浮动",
        "picSmall": "http://img.mukewang.com/53d74f960001ae9d06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/53d74f960001ae9d06000338.jpg",
        "description": "主要介绍了浮动属性的前世与今生,糟粕与精华,误解与滥用等。",
        "learner": 45656
    },
    {
        "id": 30,
        "name": "CSS未来",
        "picSmall": "http://img.mukewang.com/54c87c73000150cf06000338-300-170.jpg",
        "picBig": "http://img.mukewang.com/54c87c73000150cf06000338.jpg",
        "description": "CSS之父Bert Bos带来的分享。",
        "learner": 13436
    }
]
  1. 贴上相关代码
    我的代码如下:

public class MainActivity extends AppCompatActivity {

    private RequestQueue queue;
    private String url = "http://www.imooc.com/api/teacher?type=4&num=30";
    private List<Bean> datas = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        queue = Volley.newRequestQueue(this);
        datas = new ArrayList<Bean>();
        getData();

    }

    private void getData() {

        JsonObjectRequest request = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jsonObject) {

                datas = JSON.parseArray(jsonObject.toString(), Bean.class);
                Log.i("ddddd", "" + datas.size());

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {


            }
        });

        queue.add(request);
    }
}

Bean.java

package china.fastjsondemo;


public class Bean {

    public Bean() {
    }

    private String id;
    private String name;
    private String picSmall;
    private String picBig;
    private String description;
    private String learner;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPicSmall() {
        return picSmall;
    }

    public void setPicSmall(String picSmall) {
        this.picSmall = picSmall;
    }

    public String getPicBig() {
        return picBig;
    }

    public void setPicBig(String picBig) {
        this.picBig = picBig;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getLearner() {
        return learner;
    }

    public void setLearner(String learner) {
        this.learner = learner;
    }
}
  1. 贴上报错信息

出错:`.fastjson.JSONException: exepct '[', but {

at com.alibaba`
  1. 贴上相关截图

  2. 已经尝试过哪些方法仍然没解决(附上相关链接)

我的疑问:是不是fastJson要解析的json数据有一定严密规定死的格式???要不然的话,这段Json数据怎么解析下来.......普通的方法,我会,但写太多了。今天学用fastJson这个东西解析.....

回答:

根据你这个API地址 http://www.imooc.com/api/teacher?type=4&num=30

返回的json数据有两层,而你只解析了一层,当然会数据错误。

应该是建立两层
DataBean

public class DataBean {
    private int id;
    private String name;
    private String picSmall;
    private String picBig;
    private String description;
    private int learner;
    //此处省略 getter & setter
}

RootGroup

public class RootGroup {
    private int status;
    private List<DataBean> data;
    private String msg;
    //此处省略 getter & setter
}

以上由下方工具生成(动手的地方比较多)。,详见附录1
Ps. Android Studio 上还有更方便的插件 GsonFormat (坐上来,自己动) ,详见附录2

然后数据获取处(实际上你写的只有这一段代码就解析好了。。

RootGroup root = JSON.parseObject(jsonStr, RootGroup.class);
        for (int i = 0; i < root.getData().size(); i++) {
            Sys.out(root.getData().get(i).getName());
        }

直接翻译过来就是,异常出现在 中括号  “[” 的地方,我要的是中括号,你却给我一个 花括号 “{”,出现不匹配的类型为XXXX.java

换言之,就是我要的是一个List(中括号  “[” )的XXXX的java实体,你却给我一个对象类型的数据

解决方法:

json返回的时候,换成 [{}] ,也就是List包裹的对象

具体操作:

项目中遇到的问题,不好找原因,用Json工具校验,异常返回也是校验成功,所以排查这里的问题很是伤肝
下面分享一种情况:
这个是正常的:

{
    "absId": "200",
    "abstitle": "",
    "item": [
        {
            "absId": "",
            "name": ""
        },
        {
            "absId": "",
            "name": ""
        }
    ]
}

大家注意:返回的item这个字段应该是数组类型
下面看下异常返回:

{
    "absId": 3,
    "abstitle": "",
    "item": {
        "absId": 20,
        "abstitle": "VPN"
    }
}

在这里item这个字段变成了object,当然解析不出来了!!!

总结:

      就是因为解析成相应的对象的时候,json串里明明是“{}”类型的对象,错写成了list数组


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值