栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

NullPointerException:使用GSON在JAVA中进行JSON解析

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NullPointerException:使用GSON在JAVA中进行JSON解析

解:

您正在使用更多的类来解析JSON响应!您可以删除班级

ListTeleServices
TeleService
并仅保留
Record
班级。

Gson gson = new Gson();Type mapOfMapsType = new TypeToken<Map<String, Map<String, Record>>>() {}.getType();Map<String, Map<String, Record>> map = gson.fromJson(br, mapOfMapsType);

最后,为了获得方法名称,您必须使用:

String methodName = map.get("Teleservice_2").get("Record_33").getMethodName();

说明:

当您使用类

ListTeleServices
在此处解析JSON时:

ListTeleServices teleservices = gson.fromJson(br, ListTeleServices.class);

Gson所做的是分析该类

ListTeleServices
并将其与JSON响应进行比较,因此它说:

  1. 您传递了一个类

    ListTeleServices.class
    ,并且JSON响应从一个对象开始
    {}
    …到目前为止,一切正常!

  2. 然后,它继续解析JSON,并:

    • 在该类中,
      ListTeleServices
      它找到一个属性
      listTeleServices
      ,该属性是某个对象(暂时不在乎类型)。
    • 然而,在JSON响应它找到三个要素
      "Teleservice_1"
      "Teleservice_2"
      并且
      "Teleservice_3"
      ,但是他们都没有相同的名称
      listTeleServices
      ,所以GSON跳过所有这些价值和受让人
      null
      的属性
      listTeleServices

请记住,Gson需要JSON响应中的名称与您用来解析响应的类中的名称相同。

另一方面,如果您直接使用

Map<String, Map<String, Record>>
,则Gson请参见:

  1. 您传递了的类型

    Map<String, Map<String, Record>>
    ,并且JSON响应以一个对象开始
    {}
    …到目前为止,一切正常!(记住a
    Map
    只是一个对象)

  2. 然后,它继续解析JSON,并:

    • Map<String, Map<String, Record>>
      它发现必须有一些对键(串)和价值(一些对象)。
    • 在JSON响应中,它恰好找到了这对字符串
      "Teleservice_1"
      "Teleservice_2"
      "Teleservice_3"
      和一些对象
      {}
      ,因此它可以使解析愉快。

PS: 要进一步讲解,请注意您可以在班级中拥有

ListTeleServices
以下属性:

private HashMap<String, Record> Teleservice_1;private HashMap<String, Record> Teleservice_2;private HashMap<String, Record> Teleservice_3;

它会很好地工作,但是这样一来,您就无法拥有任意数量的远程服务对象…


顺便说一句,我还意识到了 另一个错误
:在您的

Response
类中,属性名称
method_parameters
与JSON响应中的字段名称不匹配
method_params
。您可以更改属性名称或使用注释:

@SerializedName("method_params")private Object[] method_parameters;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号