关于今晚解题后的感想

今天工作效率还是比较低的。

看似简单的问题,总是被我复杂化。一路走来,发现自己真的好多的不懂。连基础的jdbc都敲不好。例如插入多行记录,我居然在这个问题上发掉大量的时间,真是不可思议的。最让我感觉沮丧的一个是,我居然在修改了表字段的情况下,没有及时在代码中填充sql数据时修正回来,然后就是一直的悲剧了。总是报错总是报错。。。还有一个小问题是,插入多行记录的sql语句,我居然还不会写,又是弄了很久,最终才知道原来是

insert into t_table values(字段1,字段2...), values(字段1,字段2..);

我却是

insert into t_table values(字段1,字段2...), (字段1,字段2..);

哦,不是,因该是调转来。反正我就是在这里花了一段时间。另外,还得注意的是,mysql中的字段不能为关键字,如describe等,不知道的人,感觉泪奔。


下面是今晚花时间最长的问题了。关于json发送与解析的。

我做的是后台功能,完成来自Android等前台的申请。关于两者之间的媒介,我们首选的是轻量级的json。之前我涉及的都是些简单的接口,请求的参数几乎都是String类型的,所以,在解析参数上,struct2给了我们很多的帮助------只要同名参数还有geter,setter就可以了。因此,我并没有涉及要解析json数据。然而,这次不一样了。结构变得尚未有点多,而且不规则,于是乎,解析json数据势在必行。方法有二, 1是利用Google的gson,但是通说struct2内置json解析功能,所以就用这个吧。

问题来了。

若参数只是一个简单的对象,或者是相同对象列表,那就好办,代码都不需要怎么写,只要用一个JsonObject/JsonArray就可以搞掂了。但是,现在是那种不规则对象,所以不能用简单的方式。如下面的类

public class PreOrder {
	private Address address;
	private Shop shop;
	private List<PackCargo> packCargoList;
}

请求的参数是PreOrder列表。那么,我还是可以用JsonArray去处理的。

JsonArray array = JsonArray.fromObject(preOrderStr);  //假设这是请求的json串

这样就可以解析了吗?我尝试将array强制转为PreOrder对象,结果,哎,惨不忍睹。只怪我太相信JsonArray了,以为它能只能识别并解析成我的对象我的对象。(但是后来一想,真是煞笔了,起码你也要给人家一个PreOrder.class吧,哈哈) 然后后台使劲报错,我的tomcat不知道被虐了多少次了。然后我想,哦,可能这样不行,于是我又写出下面的代码

Shop shop = (Shop)array.get(0).

哈哈,不报错,是不可能的。至此,我想到了其中的原因。真的不能这样识别的。人家都不知道你的shop是怎样的结果,怎么帮你转化了。然后我想到前一段时间做的项目,发现我居然是有简单用过这个JsonArray的,真是汗。。。

后来,我的代码变成了

Shop shop = new Shop();
JsonObject shopJson = array.getJSonObject("shop");
shop.set...(shopJson.get(...));
...
然后就是这样了,获得一个具体的字段信息,就写入我要的对象里面去。然后你会发现,坑我的,那岂不是要写很长很长的代码?一大堆的get和set。内置Json解析包不可能这么弱智吧。一个个写,写到手断都不知道什么回事。然后我上网去搜资料,终于让我发现了toBean的存在。JsonObject.toBean(.......);至此,我终于还是说想通了。spring也是用这样的手段来实例化一个bean。哎,只怪我太愚钝了。。。。。

兴致勃勃地修改完代码继续跑,然后又发现一个问题了。address和shop都能解析,但是为什么List<PackCargo>却解析出错?后来还得重新来一遍。什么重新来一遍?就是当作List<PackCargo>是JsonArray,然后再重新解析这个包咯。不知道是我愚钝还是怎样,总感觉这个有点像递归,但是我不知道有没有这个的用法,写一个函数递归调用就万事ok了。


----------------------------------------------------准备睡觉------------------------------------------------

写下这篇文章,并不是为了让自己记着JsonArray的用法,也不是为了教会其他人使用,这么小的一个东西,谁不会啊?我的目的,只是简简单单地,记录自己解决问题的历程。能解决掉问题并不是就ok了,重要的还是要从中学会如何去解题,尤其是让你掉坑的问题,即使简单,但是还是让你转很久。问题,总归有解决的办法。就看你能不能掌握其技巧而已。

晚安


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值