006_JSONObject对象公共方法
1. accumulate系列方法給JSONObject累積值
1.1. accumulate累積值, 并返回JSONObject
1.1.1. JSONObject accumulate(String key, boolean value), 累積boolean類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
1.1.2. JSONObject accumulate(String key, int value), 累積int類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
1.1.3. JSONObject accumulate(String key, long value), 累積long類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
1.1.4. JSONObject accumulate(String key, double value), 累積double類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
1.1.5. JSONObject accumulate(String key, Object value), 累積Object類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
1.1.6. JSONObject accumulate(String key, Object value, JsonConfig jsonConfig), 累積Object類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。
1.2. accumulateAll累積Map值
1.2.1. void accumulateAll(Map map), 累積Map類型的值, 把Map中的鍵值一個(gè)一個(gè)地添加到JSONObject里。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
1.2.2. void accumulateAll(Map map, JsonConfig jsonConfig), 累積Map類型的值, 把Map中的鍵值一個(gè)一個(gè)地添加到JSONObject里。傳入了一個(gè)JsonConfig對(duì)象。
1.3. accumulate和accumulateAll總結(jié)
1.3.1. 鍵為String類型。累積Map值時(shí), Map對(duì)象的key不是String類型的話, 會(huì)被轉(zhuǎn)為String類型。
1.3.2. 鍵可以是""空字符串。
1.3.3. 鍵可以是"null"字符串。
1.3.4. 鍵不能為null對(duì)象。編寫代碼的時(shí)候, 可以把null對(duì)象作為鍵, 沒有語法錯(cuò)誤,但是運(yùn)行時(shí)會(huì)報(bào)Null Key異常。
1.3.5. 累積相同鍵, 把值合并為數(shù)組, 這就是累積值的含義吧。
1.3.6. 值可以是""空字符串。
1.3.7. 值可以是"null"字符串。
1.3.8. 累積空對(duì)象變量、空對(duì)象常量、JSONNull和"null", 效果是一樣的, 存放的都是"null"字符串。
1.3.9. 事實(shí)上都是調(diào)用Java底層的 Object java.util.Map.put(Object key, Object value)方法來存放值的。
1.4. 例子
1.4.1. 新建一個(gè)名為JSONObject的Java項(xiàng)目, 同時(shí)添加相關(guān)jar包。
1.4.2. 新建Sensor.java
package com.fj.jo;import java.io.Serializable;/*** 傳感器*/ public class Sensor implements Serializable {private static final long serialVersionUID = 1L;private Boolean weightSensor; // 重力傳感器private Boolean fingerSensor; // 指紋傳感器private String otherSensor; // 其它傳感器public Sensor() {}public Sensor(Boolean weightSensor, Boolean fingerSensor, String otherSensor) {this.weightSensor = weightSensor;this.fingerSensor = fingerSensor;this.otherSensor = otherSensor;}public Boolean getWeightSensor() {return weightSensor;}public void setWeightSensor(Boolean weightSensor) {this.weightSensor = weightSensor;}public Boolean getFingerSensor() {return fingerSensor;}public void setFingerSensor(Boolean fingerSensor) {this.fingerSensor = fingerSensor;}public String getOtherSensor() {return otherSensor;}public void setOtherSensor(String otherSensor) {this.otherSensor = otherSensor;}@Overridepublic String toString() {return "{weightSensor=" + weightSensor + ", fingerSensor=" + fingerSensor + ", otherSensor=" + otherSensor + "}";} }1.4.3. 新建JSONObjectAccumulate.java
package com.fj.jo;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONNull; import net.sf.json.JSONObject; import net.sf.json.JsonConfig;/*** JSONObject * 1. JSONObject accumulate(String key, boolean value), 累積boolean類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 2. JSONObject accumulate(String key, int value), 累積int類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 3. JSONObject accumulate(String key, long value), 累積long類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 4. JSONObject accumulate(String key, double value), 累積double類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 5. JSONObject accumulate(String key, Object value), 累積Object類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 6. JSONObject accumulate(String key, Object value, JsonConfig jsonConfig), 累積Object類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。* 7. void accumulateAll(Map map), 累積Map類型的值, 把Map中的鍵值一個(gè)一個(gè)地添加到JSONObject里。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 8. void accumulateAll(Map map, JsonConfig jsonConfig), 累積Map類型的值, 把Map中的鍵值一個(gè)一個(gè)地添加到JSONObject里。傳入了一個(gè)JsonConfig對(duì)象。* 9. 鍵為String類型。累積Map值時(shí), Map對(duì)象的key不是String類型的話, 會(huì)被轉(zhuǎn)為String類型。* 10. 鍵可以是""空字符串。* 11. 鍵可以是"null"字符串。* 12. 鍵不能為null對(duì)象。編寫代碼的時(shí)候, 可以把null對(duì)象作為鍵, 沒有語法錯(cuò)誤,但是運(yùn)行時(shí)會(huì)報(bào)Null Key異常。* 13. 累積相同鍵, 把值合并為數(shù)組, 這就是累積值的含義吧。* 14. 值可以是""空字符串。* 15. 值可以是"null"字符串。* 16. 累積空對(duì)象變量、空對(duì)象常量、JSONNull和"null", 效果是一樣的, 存放的都是"null"字符串。* 17. 事實(shí)上都是調(diào)用Java底層的 Object java.util.Map.put(Object key, Object value)方法來存放值的。*/ public class JSONObjectAccumulate {public static void main(String[] args) {// 數(shù)組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍(lán)", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網(wǎng)絡(luò)服務(wù)提供商isp.add("移動(dòng)");isp.add("聯(lián)通");isp.add("電信");// MapMap<String, String> mainParam = new HashMap<String, String>();mainParam.put("runtimeMemory", "8GB");mainParam.put("mobileMemory", "128GB");mainParam.put("CPUType", "HUAWEI Kirin 990 5G(麒麟990 5G)");mainParam.put("CPUCount", "八核");// Java BeanSensor sensor = new Sensor(true, true, "姿態(tài)感應(yīng)器、色溫傳感器");// JSONObjectJSONObject netJsonObject = new JSONObject().accumulate("5G", "移動(dòng)5G(NR)/聯(lián)通5G(NR)/電信5G(NR)").accumulate("4G", "移動(dòng)/聯(lián)通/電信4G主副卡 支持 TD-LTE/LTE FDD").accumulate("3G", "主卡: 聯(lián)通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯(lián)通3G(WCDMA)").accumulate("2G", "主卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X)");// JSONArrayJSONArray transferFunction = new JSONArray();transferFunction.element("NFC").element("WLAN");// Object key MapMap<Object, String> objKeyMap = new HashMap<Object, String>();objKeyMap.put(8, "8GB");objKeyMap.put(128.0d, "128GB");objKeyMap.put(990L, "麒麟990");// JSONNullJSONNull jsonNull = JSONNull.getInstance();// null對(duì)象變量Object nullObjectVar = null;JSONObject jsonObject = new JSONObject();jsonObject.accumulate("name", "HUAWEI P40 Pro") // 累積String類型的值, 被當(dāng)作Object類型來累積, 存放的是String類型的值.accumulate("support5G", true) // 累積boolean類型的值.accumulate("price", 5988) // 累積int類型的值.accumulate("productCode", 2601010188703L) // 累積long類型的值.accumulate("screenSize", 6.58D) // 累積double類型的值.accumulate("mobileColor", mobileColor) // 累積數(shù)組類型的值, 被當(dāng)作Object類型來累積, 存放的是JSONArray類型的值.accumulate("isp", isp) // 累積集合類型的值, 被當(dāng)作Object類型來累積, 存放的是JSONArray類型的值.accumulate("mainParam", mainParam) // 累積Map類型的值, 被當(dāng)作Object類型來累積, 存放的是JSONObject類型的值.accumulate("sensor", sensor) // 累積JavaBean對(duì)象類型的值, 被當(dāng)作Object類型來累積, 存放的是JSONObject類型的值.accumulate("netJsonObject", netJsonObject) // 累積JSONObject類型的值, 被當(dāng)作Object類型來累積, 存放的是JSONObject類型的值.accumulate("transferFunction", transferFunction) // 累積JSONArray類型的值, 被當(dāng)作Object類型來累積, 存放的是JSONArray類型的值.accumulate("price", 2988) // 累積相同鍵, 把值合并為數(shù)組.accumulate("", "鍵可以是空字符串") // 鍵可以是""空字符串.accumulate("null", "鍵可以是null字符串") // 鍵可以是"null"字符串.accumulate("empty", "") // 值可以是""空字符串.accumulate("jsonNull", jsonNull) // 累積JSONNull類型的值, 被當(dāng)作Object類型來累積, 存放的是"null"字符串.accumulate("nullObjectConst", null) // 累積空對(duì)象常量, 存放的是"null"字符串.accumulate("nullObjectVar", nullObjectVar) // 累積空對(duì)象變量, 存放的是"null"字符串.accumulate("nullStr", "null", new JsonConfig()) // 值可以是"null"字符串.accumulateAll(objKeyMap); // 累積Map類型的值, 可以把Map的值一個(gè)一個(gè)地添加到JSONObject對(duì)象。 jsonObject.accumulateAll(mainParam, new JsonConfig());System.out.println(jsonObject.toString());} }1.4.4. 運(yùn)行JSONObjectAccumulate.java
2. element系列方法給JSONObject添加值
2.1. element和elementOpt方法
2.1.1. JSONObject element(String key, boolean value), 存放boolean類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
2.1.2. JSONObject element(String key, int value), 存放int類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
2.1.3. JSONObject element(String key, long value), 存放long類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
2.1.4. JSONObject element(String key, double value), 存放double類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
2.1.5. JSONObject element(String key, Collection value), 存放Collection類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
2.1.6. JSONObject element(String key, Collection value, JsonConfig jsonConfig), 存放Collection類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。
2.1.7. JSONObject element(String key, Map value), 存放Map類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
2.1.8. JSONObject element(String key, Map value, JsonConfig jsonConfig), 存放Map類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。
2.1.9. JSONObject element(String key, Object value), 存放Object類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
2.1.10. JSONObject element(String key, Object value, JsonConfig jsonConfig), 存放Object類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。
2.1.11. JSONObject elementOpt(String key, Object value), 存放Object類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
2.1.12. JSONObject elementOpt(String key, Object value, JsonConfig jsonConfig), 存放Object類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。
2.2. element和elementOpt總結(jié)
2.2.1. 鍵為String類型。
2.2.2. 鍵可以是""空字符串。
2.2.3. 鍵可以是"null"字符串。
2.2.4. element方法鍵不能為null對(duì)象。編寫代碼的時(shí)候, 可以把null對(duì)象作為鍵, 沒有語法錯(cuò)誤,但是運(yùn)行時(shí)會(huì)報(bào)Null Key異常。
2.2.5. elementOpt方法鍵可以為null對(duì)象, 丟棄。
2.2.6. 相同鍵, 后者替換前者。
2.2.7. 值可以是""空字符串。
2.2.8. 值可以是"null"字符串, 效果和存放JSONNull類型一樣。
2.2.9. element方法, 值可以存放空對(duì)象變量, 如果是新key, 什么也不操作, 相當(dāng)于自動(dòng)丟棄。如果有key, 刪除原來的key和值。?值存放空對(duì)象常量, 語法錯(cuò)誤。
2.2.10. elementOpt方法, 值可以存放空對(duì)象變量/空對(duì)象常量, 但是會(huì)自動(dòng)丟棄。如果有key, 不刪除原來的key和值。
2.2.11. 事實(shí)上都是調(diào)用Java底層的 Object java.util.Map.put(Object key, Object value)方法來存放值的。
2.3. 例子
2.3.1. 新建JSONObjectAccumulate.java
package com.fj.jo;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONNull; import net.sf.json.JSONObject;/*** JSONObject* 1. JSONObject element(String key, boolean value), 存放boolean類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 2. JSONObject element(String key, int value), 存放int類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 3. JSONObject element(String key, long value), 存放long類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 4. JSONObject element(String key, double value), 存放double類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 5. JSONObject element(String key, Collection value), 存放Collection類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 6. JSONObject element(String key, Collection value, JsonConfig jsonConfig), 存放Collection類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。* 7. JSONObject element(String key, Map value), 存放Map類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 8. JSONObject element(String key, Map value, JsonConfig jsonConfig), 存放Map類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。* 9. JSONObject element(String key, Object value), 存放Object類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 10. JSONObject element(String key, Object value, JsonConfig jsonConfig), 存放Object類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。* 11. JSONObject elementOpt(String key, Object value), 存放Object類型的值, 并返回JSONObject。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 12. JSONObject elementOpt(String key, Object value, JsonConfig jsonConfig), 存放Object類型的值, 并返回JSONObject。傳入了一個(gè)JsonConfig對(duì)象。* 13. 鍵為String類型。* 14. 鍵可以是""空字符串。* 15. 鍵可以是"null"字符串。* 16. element方法鍵不能為null對(duì)象。編寫代碼的時(shí)候, 可以把null對(duì)象作為鍵, 沒有語法錯(cuò)誤,但是運(yùn)行時(shí)會(huì)報(bào)Null Key異常。* 17. elementOpt方法鍵可以為null對(duì)象, 丟棄。 * 18. 相同鍵, 后者替換前者。* 19. 值可以是""空字符串。* 20. 值可以是"null"字符串, 效果和存放JSONNull類型一樣。* 21. element方法, 值可以存放空對(duì)象變量, 如果是新key, 什么也不操作, 相當(dāng)于自動(dòng)丟棄。如果有key, 刪除原來的key和值。 值存放空對(duì)象常量, 語法錯(cuò)誤。* 22. elementOpt方法, 值可以存放空對(duì)象變量/空對(duì)象常量, 但是會(huì)自動(dòng)丟棄。如果有key, 不刪除原來的key和值。* 23. 事實(shí)上都是調(diào)用Java底層的 Object java.util.Map.put(Object key, Object value)方法來存放值的。*/ public class JSONObjectElement {public static void main(String[] args) {// 數(shù)組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍(lán)", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網(wǎng)絡(luò)服務(wù)提供商isp.add("移動(dòng)");isp.add("聯(lián)通");isp.add("電信");// MapMap<String, String> mainParam = new HashMap<String, String>();mainParam.put("runtimeMemory", "8GB");mainParam.put("mobileMemory", "128GB");mainParam.put("CPUType", "HUAWEI Kirin 990 5G(麒麟990 5G)");mainParam.put("CPUCount", "八核");// Java BeanSensor sensor = new Sensor(true, true, "姿態(tài)感應(yīng)器、色溫傳感器");// JSONObjectJSONObject netJsonObject = new JSONObject().element("5G", "移動(dòng)5G(NR)/聯(lián)通5G(NR)/電信5G(NR)").element("4G", "移動(dòng)/聯(lián)通/電信4G主副卡 支持 TD-LTE/LTE FDD").element("3G", "主卡: 聯(lián)通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯(lián)通3G(WCDMA)").element("2G", "主卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X)");// JSONArrayJSONArray transferFunction = new JSONArray();transferFunction.element("NFC").element("WLAN");// JSONNullJSONNull jsonNull = JSONNull.getInstance();// null對(duì)象變量Object nullObjectVar = null;JSONObject jsonObject = new JSONObject();jsonObject.element("name", "HUAWEI P40 Pro") // 存放String類型的值, 被當(dāng)作Object類型來存放, 存放的是String類型的值.element("support5G", true) // 存放boolean類型的值.element("price", 5988) // 存放int類型的值.element("productCode", 2601010188703L) // 存放long類型的值.element("screenSize", 6.58D) // 存放double類型的值.element("mobileColor", mobileColor) // 存放數(shù)組類型的值, 被當(dāng)作Object類型來存放, 存放的是JSONArray類型的值.element("isp", isp) // 存放集合類型的值, 被當(dāng)作Collection類型來存放, 存放的是JSONArray類型的值.element("mainParam", mainParam) // 存放Map類型的值, 存放的是JSONObject類型的值.element("sensor", sensor) // 存放JavaBean對(duì)象類型的值, 被當(dāng)作Object類型來存放, 存放的是JSONObject類型的值.element("netJsonObject", netJsonObject) // 存放JSONObject類型的值, 被當(dāng)作 Map類型來存放, 存放的是JSONObject類型的值.element("transferFunction", transferFunction) // 存放JSONArray類型的值, 被當(dāng)作Collect類型來存放, 存放的是JSONArray類型的值.element("price", 2988) // 存放相同鍵值, 新值替換舊值.element("", "鍵可以是空字符串") // 鍵可以是""空字符串.element("null", "鍵可以是null字符串") // 鍵可以是"null"字符串.element("empty", "") // 值可以是""空字符串.element("element_jsonNull", jsonNull) // 使用element方法, 存放JSONNull類型的值, 被當(dāng)作Object類型來存放, 存放的是"null"字符串.element("element_nullObjectVar", nullObjectVar) // element方法, 值可以存放空對(duì)象變量, 如果是新key, 什么也不操作, 相當(dāng)于自動(dòng)丟棄。如果有key, 刪除原來的key和值 // .element("element_nullObjectConst", null) // element方法, 值存放空對(duì)象常量, 語法錯(cuò)誤.element("element_nullStr", "null") // 值可以是"null"字符串.elementOpt("elementOpt_jsonNull", jsonNull) // elementOpt方法, 存放JSONNull類型的值, 被當(dāng)作Object類型來存放, 存放的是"null"字符串.elementOpt("elementOpt_nullObjectVar", nullObjectVar) // elementOpt方法, 存放空對(duì)象變量, 會(huì)自動(dòng)丟棄。如果有key, 不刪除原來的key和值.elementOpt("elementOpt_nullObjectConst", null) // elementOpt方法, 存放空對(duì)象常量, 會(huì)自動(dòng)丟棄。如果有key, 不刪除原來的key和值.elementOpt("elementOpt_nullStr", "null"); // elementOpt方法, 值可以是"null"字符串System.out.println(jsonObject.toString());} }2.3.2. 運(yùn)行JSONObjectAccumulate.java
3. put系列方法給JSONObject添加值
3.1. put和putAll方法
3.1.1. Object put(Object key, Object value), 存放值, 并返回先前值, 如果先前有key返回先前值, 如果沒有返回null。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
3.1.2. void putAll(Map map), 存放Map值, 可以把Map的值一個(gè)一個(gè)地添加到JSONObject對(duì)象。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
3.1.3. void putAll(Map map, JsonConfig jsonConfig),存放Map值, 可以把Map的值一個(gè)一個(gè)地添加到JSONObject對(duì)象。傳入了一個(gè)JsonConfig對(duì)象。
3.2. put和putAll方法總結(jié)
3.2.1. put存放值, 把鍵和值都當(dāng)作Object類型。
3.2.2. 鍵為String類型。key不是String類型的話, 會(huì)被轉(zhuǎn)為String類型。
3.2.3. 鍵可以是""空字符串。
3.2.4. 鍵可以是"null"字符串。
3.2.5. 鍵不能為null對(duì)象。編寫代碼的時(shí)候, 可以把null對(duì)象作為鍵, 沒有語法錯(cuò)誤,但是運(yùn)行時(shí)會(huì)報(bào)key is null異常。
3.2.6. 相同鍵, 后者替換前者。如果先前有key返回先前值, 如果沒有返回null。
3.2.7. 值可以是"null"字符串, 效果和存放JSONNull類型一樣。
3.2.8. 值可以存放空對(duì)象變量/常量, 但是會(huì)自動(dòng)丟棄。并刪除先前的鍵和值。
3.2.9. 事實(shí)上都是調(diào)用Java底層的 Object java.util.Map.put(Object key, Object value)方法來存放值的。
3.3. 例子
3.3.1. 新建JSONObjectPut.java
package com.fj.jo;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONNull; import net.sf.json.JSONObject; import net.sf.json.JsonConfig;/*** JSONObject* 1. Object put(Object key, Object value), 存放值, 并返回先前值, 如果先前有key返回先前值, 如果沒有返回null。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 2. void putAll(Map map), 存放Map值, 可以把Map的值一個(gè)一個(gè)地添加到JSONObject對(duì)象。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 3. void putAll(Map map, JsonConfig jsonConfig),存放Map值, 可以把Map的值一個(gè)一個(gè)地添加到JSONObject對(duì)象。傳入了一個(gè)JsonConfig對(duì)象。* 4. put存放值, 把鍵和值都當(dāng)作Object類型。* 5. 鍵為String類型。key不是String類型的話, 會(huì)被轉(zhuǎn)為String類型。* 6. 鍵可以是""空字符串。* 7. 鍵可以是"null"字符串。* 8. 鍵不能為null對(duì)象。編寫代碼的時(shí)候, 可以把null對(duì)象作為鍵, 沒有語法錯(cuò)誤,但是運(yùn)行時(shí)會(huì)報(bào)key is null異常。* 9. 相同鍵, 后者替換前者。如果先前有key返回先前值, 如果沒有返回null。* 10. 值可以是"null"字符串, 效果和存放JSONNull類型一樣。* 11. 值可以存放空對(duì)象變量/常量, 但是會(huì)自動(dòng)丟棄。并刪除先前的鍵和值。* 12. 事實(shí)上都是調(diào)用Java底層的 Object java.util.Map.put(Object key, Object value)方法來存放值的。*/ public class JSONObjectPut {public static void main(String[] args) {// 數(shù)組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍(lán)", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網(wǎng)絡(luò)服務(wù)提供商isp.add("移動(dòng)");isp.add("聯(lián)通");isp.add("電信");// MapMap<String, String> mainParam = new HashMap<String, String>();mainParam.put("runtimeMemory", "8GB");mainParam.put("mobileMemory", "128GB");mainParam.put("CPUType", "HUAWEI Kirin 990 5G(麒麟990 5G)");mainParam.put("CPUCount", "八核");// Java BeanSensor sensor = new Sensor();sensor.setWeightSensor(true);sensor.setFingerSensor(true);sensor.setOtherSensor("姿態(tài)感應(yīng)器、色溫傳感器");// JSONObjectJSONObject netJsonObject = new JSONObject();netJsonObject.put("5G", "移動(dòng)5G(NR)/聯(lián)通5G(NR)/電信5G(NR)");netJsonObject.put("4G", "移動(dòng)/聯(lián)通/電信4G主副卡 支持 TD-LTE/LTE FDD");netJsonObject.put("3G", "主卡: 聯(lián)通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯(lián)通3G(WCDMA)");netJsonObject.put("2G", "主卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X)");// JSONArrayJSONArray transferFunction = new JSONArray();transferFunction.element("NFC").element("WLAN");// Object key MapMap<Object, String> objKeyMap = new HashMap<Object, String>();objKeyMap.put(8, "8GB");objKeyMap.put(128.0d, "128GB");objKeyMap.put(990L, "麒麟990");// JSONNullJSONNull jsonNull = JSONNull.getInstance();// null對(duì)象變量Object nullObjectVar = null;JSONObject jsonObject = new JSONObject();jsonObject.put("name", "HUAWEI P40 Pro"); // 存放String類型的值, 被當(dāng)作Object類型來存放, 存放的是String類型的值jsonObject.put("support5G", true); // 存放boolean類型的值, 被當(dāng)作Object類型來存放, 存放的是boolean類型的值jsonObject.put("price", 5988); // 存放int類型的值, 被當(dāng)作Object類型來存放, 存放的是int類型的值jsonObject.put("productCode", 2601010188703L); // 存放long類型的值, 被當(dāng)作Object類型來存放, 存放的是long類型的值jsonObject.put("screenSize", 6.58D); // 存放double類型的值, 被當(dāng)作Object類型來存放, 存放的是double類型的值jsonObject.put("mobileColor", mobileColor); // 存放數(shù)組類型的值, 被當(dāng)作Object類型來存放, 存放的是JSONArray類型的值jsonObject.put("isp", isp); // 存放集合類型的值, 被當(dāng)作Object類型來存放, 存放的是JSONArray類型的值jsonObject.put("mainParam", mainParam);// 存放Map類型的值, 被當(dāng)作Object類型來存放, 存放的是JSONObject類型的值jsonObject.put("sensor", sensor); // 存放JavaBean對(duì)象類型的值, 被當(dāng)作Object類型來存放, 存放的是JSONObject類型的值jsonObject.put("netJsonObject", netJsonObject); // 存放JSONObject類型的值, 被當(dāng)作Object類型來存放, 存放的是JSONObject類型的值jsonObject.put("transferFunction", transferFunction); // 存放JSONArray類型的值, 被當(dāng)作Object類型來存放, 存放的是JSONArray類型的值jsonObject.put("price", 2988); // 存放相同鍵值, 新值替換舊值jsonObject.put("", "鍵可以是空字符串"); // 鍵可以是""空字符串jsonObject.put("null", "鍵可以是null字符串"); // 鍵可以是"null"字符串jsonObject.put("empty", ""); // 值可以是""空字符串jsonObject.put("jsonNull", jsonNull); // 存放JSONNull類型的值, 被當(dāng)作Object類型來存放, 存放的是"null"字符串jsonObject.put("nullObjectVar", nullObjectVar); // 存放空對(duì)象變量, 被丟棄。如果之前有這個(gè)key, 刪除先前的鍵和值。 jsonObject.put("nullObjectConst", null); // 存放空對(duì)象常量, 被丟棄 。如果之前有這個(gè)key, 刪除先前的鍵和值。jsonObject.put("nullStr", "null"); // 值可以是"null"字符串jsonObject.putAll(objKeyMap); // 存放Map類型的值, 可以把Map的值一個(gè)一個(gè)地添加到JSONObject對(duì)象。 jsonObject.putAll(mainParam, new JsonConfig());System.out.println(jsonObject.toString());} }3.3.2. 運(yùn)行JSONObjectPut.java
4. accumulate、element、put給JSONObject添加值對(duì)比
4.1. accumulate給JSONObject累積值
4.1.1. accumulate可以累積boolean、int、long、double、Object類型的值。
4.1.2. 鍵為String類型。累積Map值時(shí), Map對(duì)象的key不是String類型的話, 會(huì)被轉(zhuǎn)為String類型。
4.1.3. 累積相同鍵, 把值合并為數(shù)組。
4.2. element給JSONObject添加值
4.2.1. element可以存放boolean、int、long、double、Collection、Map、Object類型的值。
4.2.2. 鍵為String類型。
4.2.3. 相同鍵, 后者替換前者。
4.3. put給JSONObject添加值
4.3.1. put存放值, 把鍵和值都當(dāng)作Object類型。
4.3.2. 鍵為String類型。key不是String類型的話, 會(huì)被轉(zhuǎn)為String類型。
4.3.3. 相同鍵, 后者替換前者。如果先前有key返回先前值, 如果沒有返回null。
4.4. element的優(yōu)勢(shì)
4.4.1. 事實(shí)上, 鍵只能是String類型。少類型轉(zhuǎn)換。
4.4.2. 事實(shí)上, 值可以是String, boolean、int、long、double、JSONNull、JSONObject、JSONArray、Object類型的值。類型豐富。
5. JSONObject的has方法
5.1. boolean has(String key), 查明JSONObject是否包含指明的鍵。如果包含返回true, 不包含返回false。
5.2. 新建JSONObjectHas.java
package com.fj.jo;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONNull; import net.sf.json.JSONObject;/*** JSONObject* 1. boolean has(String key), 查明JSONObject是否包含指明的鍵。如果包含返回true, 不包含返回false。*/ public class JSONObjectHas {public static void main(String[] args) {// 數(shù)組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍(lán)", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網(wǎng)絡(luò)服務(wù)提供商isp.add("移動(dòng)");isp.add("聯(lián)通");isp.add("電信");// MapMap<String, String> mainParam = new HashMap<String, String>();mainParam.put("runtimeMemory", "8GB");mainParam.put("mobileMemory", "128GB");mainParam.put("CPUType", "HUAWEI Kirin 990 5G(麒麟990 5G)");mainParam.put("CPUCount", "八核");// Java BeanSensor sensor = new Sensor();sensor.setWeightSensor(true);sensor.setFingerSensor(true);sensor.setOtherSensor("姿態(tài)感應(yīng)器、色溫傳感器");// JSONObjectJSONObject netJsonObject = new JSONObject().element("5G", "移動(dòng)5G(NR)/聯(lián)通5G(NR)/電信5G(NR)").element("4G", "移動(dòng)/聯(lián)通/電信4G主副卡 支持 TD-LTE/LTE FDD").element("3G", "主卡: 聯(lián)通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯(lián)通3G(WCDMA)").element("2G", "主卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X)");// JSONArrayJSONArray transferFunction = new JSONArray();transferFunction.element("NFC").element("WLAN");// JSONNullJSONNull jsonNull = JSONNull.getInstance();JSONObject jsonObject = new JSONObject();jsonObject.element("jsonNull", jsonNull).element("mobileColor", mobileColor) .element("isp", isp) .element("mainParam", mainParam) .element("sensor", sensor) .element("netJsonObject", netJsonObject) .element("transferFunction", transferFunction); System.out.println(jsonObject.has("jsonNull"));System.out.println(jsonObject.has("mobileColor")); // 查明JSONObject是否包含mobileColor鍵System.out.println(jsonObject.has("main_Param"));System.out.println(jsonObject.has("sensor"));System.out.println(jsonObject.has("netJsonObject"));System.out.println(jsonObject.has("transferFunction"));} }5.3. 運(yùn)行JSONObjectHas.java
6. JSONObject的get方法
6.1. String getString(String key), 獲得鍵相關(guān)聯(lián)的String類型的值。
6.2. boolean getBoolean(String key), 獲得鍵相關(guān)聯(lián)的boolean類型的值。
6.3. int getInt(String key), 獲得鍵相關(guān)聯(lián)的int類型的值。
6.4. long getLong(String key), 獲得鍵相關(guān)聯(lián)的long類型的值。可以接收int類型的值。
6.5. double getDouble(String key), 獲得鍵相關(guān)聯(lián)的double類型的值。
6.6. JSONArray getJSONArray(String key), 獲得鍵相關(guān)聯(lián)的JSONArray類型的值。
6.7. JSONObject getJSONObject(String key), 獲得鍵相關(guān)聯(lián)的JSONObject類型的值。
6.8. Object get(String key), 獲得鍵相關(guān)聯(lián)的Object類型的值。只要鍵存在, 可以接收任何類型的值。
6.9. 試圖獲取一個(gè)不存在的key, 發(fā)生錯(cuò)誤。
6.10. 如果類型不匹配不會(huì)報(bào)錯(cuò), 返回該類型的默認(rèn)值。
6.11. 新建JSONObjectGet.java
package com.fj.jo;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONNull; import net.sf.json.JSONObject;/*** JSONObject* 1. String getString(String key), 獲得鍵相關(guān)聯(lián)的String類型的值。* 2. boolean getBoolean(String key), 獲得鍵相關(guān)聯(lián)的boolean類型的值。* 3. int getInt(String key), 獲得鍵相關(guān)聯(lián)的int類型的值。* 4. long getLong(String key), 獲得鍵相關(guān)聯(lián)的long類型的值。可以接收int類型的值。* 5. double getDouble(String key), 獲得鍵相關(guān)聯(lián)的double類型的值。* 6. JSONArray getJSONArray(String key), 獲得鍵相關(guān)聯(lián)的JSONArray類型的值。* 7. JSONObject getJSONObject(String key), 獲得鍵相關(guān)聯(lián)的JSONObject類型的值。* 8. Object get(String key), 獲得鍵相關(guān)聯(lián)的Object類型的值。只要鍵存在, 可以接收任何類型的值。* 9. 試圖獲取一個(gè)不存在的key, 發(fā)生錯(cuò)誤。* 10. 如果類型不匹配不會(huì)報(bào)錯(cuò), 返回該類型的默認(rèn)值。*/ public class JSONObjectGet {public static void main(String[] args) {// 數(shù)組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍(lán)", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網(wǎng)絡(luò)服務(wù)提供商isp.add("移動(dòng)");isp.add("聯(lián)通");isp.add("電信");// MapMap<String, String> mainParam = new HashMap<String, String>();mainParam.put("runtimeMemory", "8GB");mainParam.put("mobileMemory", "128GB");mainParam.put("CPUType", "HUAWEI Kirin 990 5G(麒麟990 5G)");mainParam.put("CPUCount", "八核");// Java BeanSensor sensor = new Sensor();sensor.setWeightSensor(true);sensor.setFingerSensor(true);sensor.setOtherSensor("姿態(tài)感應(yīng)器、色溫傳感器");// JSONObjectJSONObject netJsonObject = new JSONObject().element("5G", "移動(dòng)5G(NR)/聯(lián)通5G(NR)/電信5G(NR)").element("4G", "移動(dòng)/聯(lián)通/電信4G主副卡 支持 TD-LTE/LTE FDD").element("3G", "主卡: 聯(lián)通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯(lián)通3G(WCDMA)").element("2G", "主卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X)");// JSONArrayJSONArray transferFunction = new JSONArray();transferFunction.element("NFC").element("WLAN");// JSONNullJSONNull jsonNull = JSONNull.getInstance();JSONObject jsonObject = new JSONObject();jsonObject.element("name", "HUAWEI P40 Pro") .element("support5G", true) .element("price", 5988) .element("productCode", 2601010188703L) .element("screenSize", 6.58D) .element("jsonNull", jsonNull).element("mobileColor", mobileColor) .element("isp", isp) .element("mainParam", mainParam) .element("sensor", sensor) .element("netJsonObject", netJsonObject) .element("transferFunction", transferFunction); String name = jsonObject.getString("name"); // 獲取鍵相關(guān)聯(lián)的String值boolean support5G = jsonObject.getBoolean("support5G"); // 獲取鍵相關(guān)聯(lián)的boolean值int price = jsonObject.getInt("price"); // 獲取鍵相關(guān)聯(lián)的int值long productCode = jsonObject.getLong("productCode"); // 獲取鍵相關(guān)聯(lián)的long值double screenSize = jsonObject.getDouble("screenSize"); // 獲取鍵相關(guān)聯(lián)的double值// 獲取鍵相關(guān)聯(lián)的JSONArray值。我們存放的數(shù)組類型值, 被當(dāng)作JSONArray類型來存放, 所以用getJSONArray來獲取。JSONArray getMobileColor = jsonObject.getJSONArray("mobileColor"); // 獲取鍵相關(guān)聯(lián)的JSONArray值。我們存放的集合類型值, 被當(dāng)作JSONArray類型來存放, 所以用getJSONArray來獲取。JSONArray getIsp = jsonObject.getJSONArray("isp"); // 獲取鍵相關(guān)聯(lián)的JSONObject值。我們存放的Map類型值, 被當(dāng)作JSONObject類型來存放, 所以用getJSONObject來獲取。JSONObject getmainParam = jsonObject.getJSONObject("mainParam"); JSONObject getNetJsonObject = jsonObject.getJSONObject("netJsonObject"); // 獲取鍵相關(guān)聯(lián)的JSONObject值JSONArray getTransferFunction = jsonObject.getJSONArray("transferFunction"); // 獲取鍵相關(guān)聯(lián)的JSONArray值Object getSensor = jsonObject.get("sensor"); // 獲取鍵相關(guān)聯(lián)的Object值Object getJsonNull = jsonObject.get("jsonNull"); // 獲取鍵相關(guān)聯(lián)的Object值System.out.println("name = " + name);System.out.println("support5G = " + support5G);System.out.println("price = " + price);System.out.println("productCode = " + productCode);System.out.println("screenSize = " + screenSize);System.out.println("getMobileColor = " + getMobileColor.toString()); System.out.println("getIsp = " + getIsp.toString());System.out.println("getmainParam = " + getmainParam.toString());System.out.println("getNetJsonObject = " + getNetJsonObject.toString());System.out.println("getTransferFunction = " + getTransferFunction.toString());System.out.println("getSensor = " + getSensor.toString());System.out.println("getJsonNull = " + getJsonNull.toString());} }6.12. 運(yùn)行JSONObjectGet.java
7. JSONObject的opt方法
7.1. String optString(String key), 獲得鍵相關(guān)聯(lián)的String類型的值。
7.2. boolean optBoolean(String key), 獲得鍵相關(guān)聯(lián)的boolean類型的值。
7.3. int optInt(String key), 獲得鍵相關(guān)聯(lián)的int類型的值。
7.4. long optLong(String key), 獲得鍵相關(guān)聯(lián)的long類型的值。可以接收int類型的值。
7.5. double optDouble(String key), 獲得鍵相關(guān)聯(lián)的double類型的值。
7.6. JSONArray optJSONArray(String key), 獲得鍵相關(guān)聯(lián)的JSONArray類型的值。
7.7. JSONObject optJSONObject(String key), 獲得鍵相關(guān)聯(lián)的JSONObject類型的值。
7.8. Object opt(String key), 獲得鍵相關(guān)聯(lián)的Object類型的值。只要鍵存在, 可以接收任何類型的值。
7.9. String optString(String key, String defaultValue), 獲得鍵相關(guān)聯(lián)的String類型的值, 可以指定一個(gè)String類型的默認(rèn)值。
7.10. boolean optBoolean(String key, boolean defaultValue), 獲得鍵相關(guān)聯(lián)的boolean類型的值, 可以指定一個(gè)boolean類型的默認(rèn)值。
7.11. int optInt(String key, int defaultValue), 獲得鍵相關(guān)聯(lián)的int類型的值, 可以指定一個(gè)int類型的默認(rèn)值。
7.12. long optLong(String key, long defaultValue), 獲得鍵相關(guān)聯(lián)的long類型的值, 可以指定一個(gè)long類型的默認(rèn)值。可以接收int類型的值。
7.13. double optDouble(String key, double defaultValue), 獲得鍵相關(guān)聯(lián)的double類型的值, 可以指定一個(gè)double類型的默認(rèn)值。
7.14. 試圖獲取一個(gè)不存在的key, 返回該類型的默認(rèn)值或者使用默認(rèn)值(相比get獲取值更實(shí)用)。
7.15. 可以給String、int、boolean、double、long類型指定默認(rèn)值(這是相比get獲取值的唯一好處)。
7.16. 假如試圖獲取一個(gè)不存在的JSONObject、JSONArray、Object類型的值, 會(huì)返回空對(duì)象, 容易發(fā)生空指針異常。這個(gè)時(shí)候我們可以結(jié)合has判斷鍵不存在的時(shí)候, 指定默認(rèn)值, 防止發(fā)生空指針異常。opt指定默認(rèn)值+has判斷指定默認(rèn)值, 這種方式更實(shí)用。
7.17. 新建JSONObjectOpt.java
package com.fj.jo;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONNull; import net.sf.json.JSONObject;/*** JSONObject* 1. String optString(String key), 獲得鍵相關(guān)聯(lián)的String類型的值。* 2. boolean optBoolean(String key), 獲得鍵相關(guān)聯(lián)的boolean類型的值。* 3. int optInt(String key), 獲得鍵相關(guān)聯(lián)的int類型的值。* 4. long optLong(String key), 獲得鍵相關(guān)聯(lián)的long類型的值。可以接收int類型的值。* 5. double optDouble(String key), 獲得鍵相關(guān)聯(lián)的double類型的值。* 6. JSONArray optJSONArray(String key), 獲得鍵相關(guān)聯(lián)的JSONArray類型的值。* 7. JSONObject optJSONObject(String key), 獲得鍵相關(guān)聯(lián)的JSONObject類型的值。* 8. Object opt(String key), 獲得鍵相關(guān)聯(lián)的Object類型的值。只要鍵存在, 可以接收任何類型的值。* 9. String optString(String key, String defaultValue), 獲得鍵相關(guān)聯(lián)的String類型的值, 可以指定一個(gè)String類型的默認(rèn)值。* 10. boolean optBoolean(String key, boolean defaultValue), 獲得鍵相關(guān)聯(lián)的boolean類型的值, 可以指定一個(gè)boolean類型的默認(rèn)值。* 11. int optInt(String key, int defaultValue), 獲得鍵相關(guān)聯(lián)的int類型的值, 可以指定一個(gè)int類型的默認(rèn)值。* 12. long optLong(String key, long defaultValue), 獲得鍵相關(guān)聯(lián)的long類型的值, 可以指定一個(gè)long類型的默認(rèn)值。可以接收int類型的值。* 13. double optDouble(String key, double defaultValue), 獲得鍵相關(guān)聯(lián)的double類型的值, 可以指定一個(gè)double類型的默認(rèn)值。* 14. 試圖獲取一個(gè)不存在的key, 返回該類型的默認(rèn)值或者使用默認(rèn)值(相比get獲取值更實(shí)用)。* 15. 可以給String、int、boolean、double、long類型指定默認(rèn)值(這是相比get獲取值的唯一好處)。* 16. 假如試圖獲取一個(gè)不存在的JSONObject、JSONArray、Object類型的值, 會(huì)返回空對(duì)象, 容易發(fā)生空指針異常。這個(gè)時(shí)候我們可以結(jié)合has判斷鍵不存在的時(shí)候, 指定默認(rèn)值, 防止發(fā)生空指針異常。* opt指定默認(rèn)值+has判斷指定默認(rèn)值, 這種方式更實(shí)用。*/ public class JSONObjectOpt {public static void main(String[] args) {// 數(shù)組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍(lán)", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網(wǎng)絡(luò)服務(wù)提供商isp.add("移動(dòng)");isp.add("聯(lián)通");isp.add("電信");// MapMap<String, String> mainParam = new HashMap<String, String>();mainParam.put("runtimeMemory", "8GB");mainParam.put("mobileMemory", "128GB");mainParam.put("CPUType", "HUAWEI Kirin 990 5G(麒麟990 5G)");mainParam.put("CPUCount", "八核");// Java BeanSensor sensor = new Sensor();sensor.setWeightSensor(true);sensor.setFingerSensor(true);sensor.setOtherSensor("姿態(tài)感應(yīng)器、色溫傳感器");// JSONObjectJSONObject netJsonObject = new JSONObject().element("5G", "移動(dòng)5G(NR)/聯(lián)通5G(NR)/電信5G(NR)").element("4G", "移動(dòng)/聯(lián)通/電信4G主副卡 支持 TD-LTE/LTE FDD").element("3G", "主卡: 聯(lián)通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯(lián)通3G(WCDMA)").element("2G", "主卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動(dòng)2G(GSM)/聯(lián)通2G(GSM)/電信2G(CDMA 1X)");// JSONArrayJSONArray transferFunction = new JSONArray();transferFunction.element("NFC").element("WLAN");// JSONNullJSONNull jsonNull = JSONNull.getInstance();JSONObject jsonObject = new JSONObject();jsonObject.element("name", "HUAWEI P40 Pro") .element("support5G", true) .element("price", 5988) .element("productCode", 2601010188703L) .element("screenSize", 6.58D) .element("jsonNull", jsonNull).element("mobileColor", mobileColor) .element("isp", isp) .element("mainParam", mainParam) .element("sensor", sensor) .element("netJsonObject", netJsonObject) .element("transferFunction", transferFunction); String name = jsonObject.optString("name", ""); // 獲取鍵相關(guān)聯(lián)的String值, 并指定""空字符串為默認(rèn)值boolean support5G = jsonObject.optBoolean("support5G", false); // 獲取鍵相關(guān)聯(lián)的boolean值, 并指定false為默認(rèn)值int price = jsonObject.optInt("price", 0); // 獲取鍵相關(guān)聯(lián)的int值, 并指定0為默認(rèn)值long productCode = jsonObject.optLong("productCode", 0L); // 獲取鍵相關(guān)聯(lián)的long值, 并指定0L為默認(rèn)值double screenSize = jsonObject.optDouble("screenSize", 0.0D); // 獲取鍵相關(guān)聯(lián)的double值, 并指定0.0D為默認(rèn)值// 獲取鍵相關(guān)聯(lián)的JSONArray值。我們存放的數(shù)組類型值, 被當(dāng)作JSONArray類型來存放, 所以用optJSONArray來獲取。JSONArray getMobileColor = jsonObject.optJSONArray("mobileColor"); // 獲取鍵相關(guān)聯(lián)的JSONArray值。我們存放的集合類型值, 被當(dāng)作JSONArray類型來存放, 所以用optJSONArray來獲取。JSONArray getIsp = jsonObject.optJSONArray("isp"); // 獲取鍵相關(guān)聯(lián)的JSONObject值。我們存放的Map類型值, 被當(dāng)作JSONObject類型來存放, 所以用optJSONObject來獲取。JSONObject getmainParam = jsonObject.optJSONObject("mainParam"); JSONObject getNetJsonObject = jsonObject.optJSONObject("netJsonObject"); // 獲取鍵相關(guān)聯(lián)的JSONObject值JSONArray getTransferFunction = jsonObject.optJSONArray("transferFunction"); // 獲取鍵相關(guān)聯(lián)的JSONArray值Object getSensor = jsonObject.opt("sensor"); // 獲取鍵相關(guān)聯(lián)的Object值Object getJsonNull = jsonObject.opt("jsonNull"); // 獲取鍵相關(guān)聯(lián)的Object值// 通過has判斷鍵不存在的時(shí)候, 給對(duì)象類型指定一個(gè)默認(rèn)值if(!jsonObject.has("jsonNull")) {getJsonNull = JSONNull.getInstance().toString();}System.out.println("name = " + name);System.out.println("support5G = " + support5G);System.out.println("price = " + price);System.out.println("productCode = " + productCode);System.out.println("screenSize = " + screenSize);System.out.println("getMobileColor = " + getMobileColor.toString()); System.out.println("getIsp = " + getIsp.toString());System.out.println("getmainParam = " + getmainParam.toString());System.out.println("getNetJsonObject = " + getNetJsonObject.toString());System.out.println("getTransferFunction = " + getTransferFunction.toString());System.out.println("getSensor = " + getSensor.toString());System.out.println("getJsonNull = " + getJsonNull.toString());} }7.18. 運(yùn)行JSONObjectOpt.java
8. JSONObject的discard方法
8.1. JSONObject discard(String key), 丟棄現(xiàn)有的key和它的值, 并返回原JSONObject。
8.2. 新建JSONObjectDiscard.java
package com.fj.jo;import net.sf.json.JSONObject;/*** JSONObject* 1. JSONObject discard(String key), 丟棄現(xiàn)有的key和它的值, 并返回原JSONObject。*/ public class JSONObjectDiscard {public static void main(String[] args) {JSONObject jsonObject = new JSONObject();jsonObject.element("name", "HUAWEI P40 Pro") .element("support5G", true) .element("price", 5988) .element("productCode", 2601010188703L) .element("screenSize", 6.58D) ;System.out.println(jsonObject.toString());JSONObject resultJSONObject = jsonObject.discard("support5G1"); // 丟棄support5G鍵和它的值。System.out.println(resultJSONObject.toString());System.out.println(jsonObject == resultJSONObject);} }8.3. 運(yùn)行JSONObjectDiscard.java
9. JSONObject的remove方法
9.1. Object remove(String key), 刪除現(xiàn)有的key和它的值, 并返回刪除的值, 如果不存在返回null。
9.2. 新建JSONObjectRemove.java
package com.fj.jo;import net.sf.json.JSONObject;/*** JSONObject* 1. Object remove(String key), 刪除現(xiàn)有的key和它的值, 并返回刪除的值, 如果不存在返回null。*/ public class JSONObjectRemove {public static void main(String[] args) {JSONObject jsonObject = new JSONObject();jsonObject.element("name", "HUAWEI P40 Pro") .element("support5G", true) .element("price", 5988) .element("productCode", 2601010188703L) .element("screenSize", 6.58D); System.out.println(jsonObject.toString()); Object removeValue = jsonObject.remove("name"); // 刪除name鍵和它的值System.out.println("removeValue = " + removeValue);System.out.println(jsonObject.toString());System.out.println(jsonObject.remove("cpu")); // 刪除不存在的key} }9.3. 運(yùn)行JSONObjectRemove.java
10. JSONObject的keys和values方法
10.1. Iterator keys(), 獲取JSONObject的keys迭代器。
10.2. Collection values(), 獲取JSONObject的values的集合。
10.3. 新建JSONObjectKeysValues.java
package com.fj.jo;import java.util.Iterator; import net.sf.json.JSONObject;/*** JSONObject* 1. Iterator keys(), 獲取JSONObject的keys迭代器。* 2. Collection values(), 獲取JSONObject的values的集合。*/ public class JSONObjectKeysValues {public static void main(String[] args) {JSONObject jsonObject = new JSONObject();jsonObject.element("name", "HUAWEI P40 Pro") .element("support5G", true) .element("price", 5988) .element("productCode", 2601010188703L) .element("screenSize", 6.58D); Iterator<?> keyIterator = jsonObject.keys(); // 獲取JSONObject的keys迭代器while(keyIterator.hasNext()) {System.out.println(keyIterator.next());}Iterator<?> valueIterator = jsonObject.values().iterator(); // 獲取JSONObject的values的集合while(valueIterator.hasNext()) {System.out.println(valueIterator.next());}} }10.4. 運(yùn)行JSONObjectKeysValues.java
11. JSONObject的containsKey和containsValue方法
11.1. boolean containsKey(Object key), 是否包含鍵。鍵存在返回true, 不存在返回false。
11.2. boolean containsValue(Object value), 是否包含值, 值存在返回true, 不存在返回false。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。
11.3. boolean containsValue(Object value, JsonConfig jsonConfig), 是否包含值, 值存在返回true, 不存在返回false。傳入了一個(gè)JsonConfig對(duì)象。
11.4. 新建JSONObjectContainsKeyValue.java
package com.fj.jo;import net.sf.json.JSONObject;/*** JSONObject* 1. boolean containsKey(Object key), 是否包含鍵。鍵存在返回true, 不存在返回false。* 2. boolean containsValue(Object value), 是否包含值, 值存在返回true, 不存在返回false。json-lib底層, 會(huì)創(chuàng)建一個(gè)JsonConfig對(duì)象使用。* 3. boolean containsValue(Object value, JsonConfig jsonConfig), 是否包含值, 值存在返回true, 不存在返回false。傳入了一個(gè)JsonConfig對(duì)象。*/ public class JSONObjectContainsKeyValue {public static void main(String[] args) {JSONObject jsonObject = new JSONObject();jsonObject.element("name", "HUAWEI P40 Pro") .element("support5G", true) .element("price", 5988) .element("productCode", 2601010188703L) .element("screenSize", 6.58D); System.out.println(jsonObject.containsKey("screenSize")); // 是否包含screenSize鍵System.out.println(jsonObject.containsValue("HUAWEI P40 Pro")); // 是否包含"HUAWEI P40 Pro"值System.out.println(jsonObject.containsValue(true)); // 是否包含true值System.out.println(jsonObject.containsValue(5988)); // 是否包含5988值System.out.println(jsonObject.containsValue(2601010188703L)); // 是否包含2601010188703L值} }11.5. 運(yùn)行JSONObjectContainsKeyValue.java
總結(jié)
以上是生活随笔為你收集整理的006_JSONObject对象公共方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 005_JSONArray对象静态方法
- 下一篇: Web前端入门第 57 问:JavaSc