欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

json-gson:.isJsonNull()问题-堆栈溢出

程序员文章站 2022-04-20 14:22:47
不用管我下面的第一个答案。我读得太快了。 看起来这是一个简单的例子,文件撒谎-或者至少是被误解了。幸运的是,代码并不是那么简单,而且gson是一个开源项目。 这是 JsonObject.get(String): 这里是 members人口: 添加到 members是为Java类中定义的每个成员创建的 ......

不用管我下面的第一个答案。我读得太快了。

看起来这是一个简单的例子,文件撒谎-或者至少是被误解了。幸运的是,代码并不是那么简单,而且gson是一个开源项目。

这是 jsonobject.get(string):

/**
   * returns the member with the specified name.
   *
   * @param membername name of the member that is being requested.
   * @return the member matching the name. null if no such member exists.
   */
  public jsonelement get(string membername) {
    if (members.containskey(membername)) {
      jsonelement member = members.get(membername);
      return member == null ? jsonnull.instance : member;
    }
    return null;
  }

这里是 members人口:

/**
   * adds a member, which is a name-value pair, to self. the name must be a string, but the value
   * can be an arbitrary jsonelement, thereby allowing you to build a full tree of jsonelements
   * rooted at this node.
   *
   * @param property name of the member.
   * @param value the member object.
   */
  public void add(string property, jsonelement value) {
    if (value == null) {
      value = jsonnull.instance;
    }
    members.put($gson$preconditions.checknotnull(property), value);
  }

添加到 members是为java类中定义的每个成员创建的-它不是基于json中的内容。(对于有兴趣的人来说,visitfieldsreflectively方法reflectingfieldnavigator(人口成员。)

因此,我想混淆了“如果没有*”这一句中“成员”一词的含义。基于代码,我认为javadoc的作者指的是java类中定义的一个成员。对于gsonapi的临时用户-就像我自己一样-我假设“成员”指的是json中的一个对象元素。

现在,这个问题清楚了吗?

基于快速阅读问题的第一个答案(为有用的链接保留):

null引用不是 jsonnull价值。(value == null)value.isjsonnull()。他们很不一样。

文档描述了调用 jsonobject.get(string)如果不存在这样的成员,则返回“[null]”。他们没有这么说 jsonnull会被归还。

打电话给 jsonelement.isjsonnull()不是检查 jsonelement引用是null推荐信。事实上,如果是null引用时,对其调用方法将引发nullpointerexception。它在检查它是否是jsonnull举个例子。