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

来源:https://www.cnblogs.com/jiangzhishan/archive/2018/09/05/9593326.html
-Advertisement-
Play Games

不用管我下麵的第一個答案。我讀得太快了。 看起來這是一個簡單的例子,文件撒謊-或者至少是被誤解了。幸運的是,代碼並不是那麼簡單,而且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舉個例子。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MySQL 查詢優化之 Block Nested-Loop 與 Batched Key Access Joins 在MySQL中,可以使用批量密鑰訪問(BKA)連接演算法,該演算法使用對連接表的索引訪問和連接緩衝區。 BKA演算法支持:內連接,外連接和半連接操作,包括嵌套外連接。 BKA的優點:更加高效的 ...
  • 前言: 實話說,我想做的是Mysql集群架構。 我的計劃是: 1.實現Docker下的Mysql主從複製 2.實現MyCat基於Mysql的讀寫分離 3.實現MyCat的分庫分表 4.實現pxc集群 5.綜合MyCat和pxc實現高可用、高併發的資料庫集群架構 當然,現在的我還是一個小菜鳥,尤其是第 ...
  • 一. perror 錯誤代碼查看工具 在mysql 的使用過程中,可能會出現各種各樣的error。這些error有些是由於操作系統引起的,比如文件或者目錄不存在等等,使用perror的作用就是解釋這些錯誤代碼的詳細含義。 perror 使用方法如下: 例如:指定錯誤號30和60分別是指什麼錯誤 在M ...
  • 由於mysql預設8小時連接無訪問,就會斷開.為此查了一下資料,有同種比較簡單的解決方案: 1. 增加 MySQL 的 wait_timeout 屬性的值。 修改 /etc/mysql/my.cnf文件,在 [mysqld] 節中設置: # Set a connection to wait 8hou ...
  • 使用SSMS資料庫管理工具修改DEFAULT約束 1、連接資料庫、選擇數據表-》右鍵點擊-》選擇設計。 2、在表設計器視窗-》選中要修改的數據列-》在列屬性中找到預設值綁定-》進行修改。 3、點擊保存(或者ctrl+s)-》關閉表設計器-》刷新表-》重新打開表設計器查看。 使用T-SQL腳本修改DE ...
  • 註:原文轉自 https://blog.csdn.net/zsg88/article/details/73715947 ,僅用作為方便查閱 一 所需軟體:Redis、Ruby語言運行環境、Redis的Ruby驅動redis-xxxx.gem、創建Redis集群的工具redis-trib.rb 二 安 ...
  • 在安卓開發過程中,當點擊HOME鍵,將app運行在後臺時,然後再點擊app圖標進入時,遇到瞭如下兩種情況: 1、每次打開時,app的入口頁面總是被執行。 2、當運行記憶體被其它應用占用完時,在進入app時,home時的當前頁面數據沒有被清除(待進一步確認),此時頁面正常,點擊返回鍵之後顯示的頁面數據被 ...
  • 一、具體問題 開發的過程中,發現某個界面部分圖片的顯示出現了問題只顯示占點陣圖片,取出圖片的url在瀏覽器卻是能打開的,各種嘗試甚至找同行的朋友幫忙在他們項目里展示都會存在問題,最終發現通過第三方框架SDWebImage或者YYWebImage下載帶有逗號的url圖片鏈接都會下載失敗,在下載方法完成的 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...