求助,一个时而是数组时而是对象的JSON要怎么解析

冻云-FrozenCloud 2019-10-14 06:11:58
从第三方获取的一个json数据,
没值的时候"awakening_info":[],
有值的时候"awakening_info":{"rid":-1,"wizard_id":862051,"unit_id":2933557224,"unit_master_id":10311,"awaken_master_id":10331,"exp":0,"is_awakened":0,"date_mod":"2019-06-27 17:10:10","date_add":"2019-06-27 17:10:10","max_exp":100000}

第一情况是数组,第二种情况是对象,
这种情况要怎么才能对象化,或者有什么方式能解析
...全文
219 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复




引用 9 楼 滚,我爱编程, 的回复:
[quote=引用 5 楼 冻云-FrozenCloud 的回复:]
[quote=引用 4 楼 滚,我爱编程, 的回复:]
[quote=引用 2 楼 IT_熊 的回复:]
你那个不是数组吧,没值的时候是对象为null的显示,都可以可以使用fastjson框架解析。
解析的结果是:
没值的时候解析的对象是null,有值的时候是具体的对象。
参考:https://blog.csdn.net/servermanage/article/details/102421969
这个小伙说的和对呀,Gson 解析第一种就是 null[/quote]

我这里的json字符串是一个片段,外面还有嵌套,
所以在对象化的时候,就会出问题,
如果是[]不管是不是空都应该写成List,但只有一个数据的时候,变成了对象。
这就是我遇到的问题。[/quote]


public Gson gson = new Gson();
RDOccuExecutionBean rdOccuExecutionBean = gson.fromJson(s,
new TypeToken<RDOccuExecutionBean>() {
}.getType()); 这种方式解析 RDOccuExecutionBean 这个换成你的model 为空的话你的所谓的list就是null ,[/quote]
用这个方法两套awakening_infoy model 转化出错try catch一下 正确输入的就是你需要的,防止替换字符出错
  • 打赏
  • 举报
回复
引用 5 楼 冻云-FrozenCloud 的回复:
[quote=引用 4 楼 滚,我爱编程, 的回复:]
[quote=引用 2 楼 IT_熊 的回复:]
你那个不是数组吧,没值的时候是对象为null的显示,都可以可以使用fastjson框架解析。
解析的结果是:
没值的时候解析的对象是null,有值的时候是具体的对象。
参考:https://blog.csdn.net/servermanage/article/details/102421969
这个小伙说的和对呀,Gson 解析第一种就是 null[/quote]

我这里的json字符串是一个片段,外面还有嵌套,
所以在对象化的时候,就会出问题,
如果是[]不管是不是空都应该写成List,但只有一个数据的时候,变成了对象。
这就是我遇到的问题。[/quote]


public Gson gson = new Gson();
RDOccuExecutionBean rdOccuExecutionBean = gson.fromJson(s,
new TypeToken<RDOccuExecutionBean>() {
}.getType()); 这种方式解析 RDOccuExecutionBean 这个换成你的model 为空的话你的所谓的list就是null ,
冻云-FrozenCloud 2019-10-16
  • 打赏
  • 举报
回复
引用 4 楼 滚,我爱编程, 的回复:
[quote=引用 2 楼 IT_熊 的回复:]
你那个不是数组吧,没值的时候是对象为null的显示,都可以可以使用fastjson框架解析。
解析的结果是:
没值的时候解析的对象是null,有值的时候是具体的对象。
参考:https://blog.csdn.net/servermanage/article/details/102421969
这个小伙说的和对呀,Gson 解析第一种就是 null[/quote]

我这里的json字符串是一个片段,外面还有嵌套,
所以在对象化的时候,就会出问题,
如果是[]不管是不是空都应该写成List,但只有一个数据的时候,变成了对象。
这就是我遇到的问题。
  • 打赏
  • 举报
回复
引用 2 楼 IT_熊 的回复:
你那个不是数组吧,没值的时候是对象为null的显示,都可以可以使用fastjson框架解析。
解析的结果是:
没值的时候解析的对象是null,有值的时候是具体的对象。
参考:https://blog.csdn.net/servermanage/article/details/102421969
这个小伙说的和对呀,Gson 解析第一种就是 null
IT_熊 2019-10-16
  • 打赏
  • 举报
回复
引用 7 楼 冻云-FrozenCloud的回复:
目前想到方向,
一个是从字符串入手,将有问题的字符串识别出来替换成正确的字符串
缺点是,如果异常情况较多,可能需要替换的不全,以及需要替换的量比较大。

另一个是从解析入手,判断类型放弃第三方直接对象化的方法,使用json原本的方法解析,
遇到异常的部分判断类型,一个值的时候主动加到list中,
缺点是由于字符串太复杂,嵌套层级太多,解析过于麻烦。

我采用了替换字符串的方法。
协议接口文档,理论上接口返回数据格式是固定的,只是一个有数据,一个无数据
冻云-FrozenCloud 2019-10-16
  • 打赏
  • 举报
回复
目前想到方向,
一个是从字符串入手,将有问题的字符串识别出来替换成正确的字符串
缺点是,如果异常情况较多,可能需要替换的不全,以及需要替换的量比较大。

另一个是从解析入手,判断类型放弃第三方直接对象化的方法,使用json原本的方法解析,
遇到异常的部分判断类型,一个值的时候主动加到list中,
缺点是由于字符串太复杂,嵌套层级太多,解析过于麻烦。

我采用了替换字符串的方法。
头发还没秃a 2019-10-16
  • 打赏
  • 举报
回复
这样的数据就很操蛋了。。我之前一个后台也是,一会传字符串型一会传json型,被我叼了了一顿
王能 2019-10-15
  • 打赏
  • 举报
回复
你们后台一定是php,你把他揍一顿或者请他喝茶就行了
IT_熊 2019-10-14
  • 打赏
  • 举报
回复
你那个不是数组吧,没值的时候是对象为null的显示,都可以可以使用fastjson框架解析。 解析的结果是: 没值的时候解析的对象是null,有值的时候是具体的对象。 参考:https://blog.csdn.net/servermanage/article/details/102421969
m-oj 应用层 2019-10-14
  • 打赏
  • 举报
回复
你可以这样,Object info = json.opt("awakening_info"); 判断info的类型if(info instanceof JSONArray){ JSONArray array = (JSONArray)info; }else{ JSONObject jsonboj = (JSONObject)info; }

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧