json-gson:.isJsonNull()問題-堆棧溢出


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

看起來這是一個簡單的例子,文件撒謊-或者至少是被誤解了。幸運的是,代碼並不是那么簡單,而且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舉個例子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM