javascript
005_JSONArray对象静态方法
1. JSONArray.fromObject靜態方法
1.1. static JSONArray fromObject(Object object)靜態方法, 把Java對象轉換為JSONArray對象。json-lib底層, 會創建一個JsonConfig對象使用。
1.2. static JSONArray fromObject(Object object, JsonConfig jsonConfig)靜態方法, 把Java對象轉換為JSONArray對象。并指定一個JsonConfig。
1.3. 編寫一個名叫JSONArrayStaticMethod的Java項目, 同時添加相關jar包。
1.4. 新建Sensor.java
package com.fj.ja;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.5. 新建JSONArrayStaticFromObject.java
package com.fj.ja;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.JsonConfig;/*** JSONArray* 1. static JSONArray fromObject(Object object)靜態方法, 把Java對象轉換為JSONArray對象。json-lib底層, 會創建一個JsonConfig對象使用。* 2. static JSONArray fromObject(Object object, JsonConfig jsonConfig)靜態方法, 把Java對象轉換為JSONArray對象。并指定一個JsonConfig。*/ public class JSONArrayStaticFromObject {public static void main(String[] args) {// 數組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網絡服務提供商isp.add("移動");isp.add("聯通");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("姿態感應器、色溫傳感器");// Java Bean集合List<Sensor> beanList = new ArrayList<Sensor>();beanList.add(new Sensor(false, true, "姿態感應器、色溫傳感器"));beanList.add(new Sensor(true, false, "姿態感應器、色溫傳感器"));beanList.add(new Sensor(false, false, "姿態感應器、色溫傳感器"));String jsonArrayStr = "[\"華為P40 Pro\",true,5988,2601010188703,6.58,[\"亮黑色\",\"冰霜銀\",\"零度白\",\"深海藍\",\"晨曦金\"],[\"移動\",\"聯通\",\"電信\"],{\"mobileMemory\":\"128GB\",\"CPUCount\":\"八核\",\"CPUType\":\"HUAWEI Kirin 990 5G(麒麟990 5G)\",\"runtimeMemory\":\"8GB\"},{\"otherSensor\":\"姿態感應器、色溫傳感器\",\"weightSensor\":true,\"fingerSensor\":true},{\"5G\":\"移動5G(NR)/聯通5G(NR)/電信5G(NR)\",\"4G\":\"移動/聯通/電信4G主副卡 支持 TD-LTE/LTE FDD\",\"3G\":\"主卡: 聯通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯通3G(WCDMA)\",\"2G\":\"主卡: 移動2G(GSM)/聯通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動2G(GSM)/聯通2G(GSM)/電信2G(CDMA 1X)\"},[\"NFC\",\"WLAN\"]]";System.out.println(JSONArray.fromObject(mobileColor)); // 把數組轉換為JSONArray對象System.out.println(JSONArray.fromObject(isp, new JsonConfig())); // 把集合轉換為JSONArray對象System.out.println(JSONArray.fromObject(mainParam)); // 把Map轉換為JSONArray對象System.out.println(JSONArray.fromObject(sensor)); // 把Java Bean轉換為JSONArray對象System.out.println(JSONArray.fromObject(beanList)); // 把Java Bean集合轉換為JSONArray對象System.out.println(JSONArray.fromObject(jsonArrayStr)); // 把JSON Array String對象轉換為JSONArray對象} }1.6. 運行JSONArrayStaticFromObject.java
2. JSONArray.toList靜態方法
2.1. static List toList(JSONArray jsonArray, Object root, JsonConfig jsonConfig)靜態方法, 從JSONArray創建一個集合。
2.2. 第二個參數傳入對象, 如果jsonArray里有JSON對象數據的話, 根據對象的類創建新對象, 封裝數據到新對象里。
2.3. 第三個參數傳入一個JSONConfig對象, JSONConfig可以設置一個ClassMap, 倘若JSON對象里還有JSON對象, 可以根據ClassMap來進行鍵和值的類型匹配。
2.4. 新建JSONArrayStaticToList.java(toList靜態方法, 第二個參數傳入HashMap對象)
package com.fj.ja;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.JsonConfig;/*** JSONArray* 1. JSONArray.toList(JSONArray jsonArray, Object root, JsonConfig jsonConfig)靜態方法, 從JSONArray創建一個集合。* 2. 第二個參數傳入對象, 如果jsonArray里有JSON對象數據的話, 根據對象的類創建新對象, 封裝數據到新對象里。* 3. 第三個參數傳入一個JSONConfig對象, JSONConfig可以設置一個ClassMap, 倘若JSON對象里還有JSON對象, 可以根據ClassMap來進行鍵和值的類型匹配。*/ public class JSONArrayStaticToList {public static void main(String[] args) {// 數組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網絡服務提供商isp.add("移動");isp.add("聯通");isp.add("電信");// Java BeanSensor sensor = new Sensor();sensor.setWeightSensor(true);sensor.setFingerSensor(true);sensor.setOtherSensor("姿態感應器、色溫傳感器"); // MapMap<String, Object> mainParam = new HashMap<String, Object>();mainParam.put("runtimeMemory", "8GB");mainParam.put("mobileMemory", "128GB");mainParam.put("CPUType", "HUAWEI Kirin 990 5G(麒麟990 5G)");mainParam.put("CPUCount", "八核");mainParam.put("sensor", sensor);// Java Bean集合List<Sensor> beanList = new ArrayList<Sensor>();beanList.add(new Sensor(false, true, "姿態感應器、色溫傳感器"));beanList.add(new Sensor(true, false, "姿態感應器、色溫傳感器"));beanList.add(new Sensor(false, false, "姿態感應器、色溫傳感器"));JSONArray jsonArray = new JSONArray();jsonArray.element("HUAWEI P40 Pro"); jsonArray.element(true);jsonArray.element(5988);jsonArray.element(2601010188703L);jsonArray.element(6.58D);jsonArray.element(JSONNull.getInstance());jsonArray.element(mobileColor);jsonArray.element(isp);jsonArray.element(mainParam); jsonArray.element(sensor);jsonArray.element(beanList);JsonConfig jsonConfig = new JsonConfig();Map<String, Class<?>> classMap = new HashMap<String, Class<?>>();classMap.put("sensor", Sensor.class);jsonConfig.setClassMap(classMap);// 把jsonArray轉換為集合, 第二個參數傳入一個HashMap對象, 根據HashMap對象的類創建新的HashMap對象, 把jsonArray里的JSON對象數據, 封裝到新的HashMap里。// 傳入一個HashMap對象是一個好主意, 因為它可以根據鍵和值很好的封裝JSON對象。List<?> list = JSONArray.toList(jsonArray, new HashMap<String, String>(), jsonConfig);for (Object obj : list) {System.out.println(obj);}} }2.5. 運行JSONArrayStaticToList.java
2.6. 新建JSONArrayStaticToListBean.java(toList靜態方法, 第二個參數傳入JavaBean對象)
package com.fj.ja;import java.util.ArrayList; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JsonConfig;/*** JSONArray* 1. JSONArray.toList(JSONArray jsonArray, Object root, JsonConfig jsonConfig)靜態方法, 從JSONArray創建一個集合。* 2. 第二個參數傳入對象, 如果jsonArray里有JSON對象數據的話, 根據對象的類創建新對象, 封裝數據到新對象里。* 3. 第三個參數傳入一個JSONConfig對象, JSONConfig可以設置一個ClassMap, 倘若JSON對象里還有JSON對象, 可以根據ClassMap來進行鍵和值的類型匹配。*/ public class JSONArrayStaticToListBean {public static void main(String[] args) {// Java BeanSensor sensor = new Sensor();sensor.setWeightSensor(true);sensor.setFingerSensor(true);sensor.setOtherSensor("姿態感應器、色溫傳感器"); // Java Bean集合List<Sensor> beanList = new ArrayList<Sensor>();beanList.add(new Sensor(false, true, "姿態感應器、色溫傳感器"));beanList.add(new Sensor(true, false, "姿態感應器、色溫傳感器"));beanList.add(new Sensor(false, false, "姿態感應器、色溫傳感器"));JSONArray jsonArray = new JSONArray();jsonArray.element("HUAWEI P40 Pro"); jsonArray.element(true);jsonArray.element(5988);jsonArray.element(2601010188703L);jsonArray.element(6.58D);jsonArray.element(sensor);jsonArray.element(beanList);// 把jsonArray轉換為集合, 第二個參數傳入一個Sensor對象, 根據Sensor對象的類創建新的Sensor對象, 把jsonArray里的JSON對象數據, 封裝到新的Sensor對象里。List<?> list = JSONArray.toList(jsonArray, new Sensor(), new JsonConfig());printList(list);}public static void printList(Object object) {if(List.class.isAssignableFrom(object.getClass())) {for (Object obj : (List<?>)object) {printList(obj);}}if(object instanceof Sensor) {System.out.println((Sensor)object);} else if(!List.class.isAssignableFrom(object.getClass())) {System.out.println(object);}} }2.7. 運行JSONArrayStaticToListBean.java
3. toArray方法
3.1. Object[] toArray(), 把JSONArray轉換為Object[]數組。調用的是Java底層的 java.util.List.toArray()方法。
3.2. 新建JSONArrayToArray.java
package com.fj.ja;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;/*** JSONArray* 1. Object[] toArray(), 把JSONArray轉換為Object[]數組。調用的是Java底層的 java.util.List.toArray()方法。*/ public class JSONArrayToArray {public static void main(String[] args) {// 數組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網絡服務提供商isp.add("移動");isp.add("聯通");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("姿態感應器、色溫傳感器");// Java Bean集合List<Sensor> beanList = new ArrayList<Sensor>();beanList.add(new Sensor(false, true, "姿態感應器、色溫傳感器"));beanList.add(new Sensor(true, false, "姿態感應器、色溫傳感器"));beanList.add(new Sensor(false, false, "姿態感應器、色溫傳感器"));JSONArray jsonArray = new JSONArray();jsonArray.element("HUAWEI P40 Pro"); // toArray后是StringjsonArray.element(true); // toArray后是booleanjsonArray.element(5988); // toArray后是intjsonArray.element(2601010188703L); // toArray后是longjsonArray.element(6.58D); // toArray后是doublejsonArray.element(JSONNull.getInstance()); // toArray后是JSONNull對象jsonArray.element(mobileColor); // toArray后是JSONArray對象jsonArray.element(isp); // toArray后是JSONArray對象jsonArray.element(mainParam); // toArray后是JSONObject對象jsonArray.element(sensor); // toArray后是JSONObject對象jsonArray.element(beanList); // toArray后是JSONArray對象, JSONArray里封裝了JSONObject對象Object[] objArr = jsonArray.toArray();for (Object item : objArr) {System.out.println(item);}} }3.3. 運行JSONArrayToArray.java?
4. JSONArray.toArray靜態方法
4.1. toArray(JSONArray jsonArray)靜態方法
4.1.1. static Object toArray(JSONArray jsonArray)靜態方法, 把JSONArray對象轉換為Java對象(實際上是數組對象)。
4.1.2. Json-lib底層自己去解析JSONArray對象。Json-lib底層會創建一個Object數組, 并調用Java底層Array.set(Object array, int index, Object value)將指定數組對象中索引組件的值設置為指定的新值, 來封裝JSONArray對象中的數據到Object數組。
4.1.3. 如果JSONArray對象是簡單對象(沒有再包含JSON對象和JSON數組數據), Json-lib底層會創建一個一維的Object[]數組, 并調用Java底層Array.set(Object array, int index, Object value)把這個一維的Object[]數組相應的坐標位置設置值。JSONArray.toArray(JSONArray jsonArray)這個靜態方法恐怕最適合解析這種簡單的JSONArray對象。
4.1.4. 如果JSONArray對象只包含JSON對象類型的數據, Json-lib底層會創建一個一維的Object[]數組, 在解析JSON對象類型的數據的時候調用Json-lib底層JSONObject對象的toBean(JSONObject jsonObject)方法, 把JSON對象類型的數據封裝到一個動態JavaBean里面(DynaBean), 然后再調用Java底層Array.set(Object array, int index, Object value)把這個一維的Object[]數組相應的坐標位置設置值。
4.1.5. 如果JSONArray對象只包含JSON數組類型的數據, Json-lib底層會創建一個二維的Object[][]數組, 并調用Java底層Array.set(Object array, int index, Object value)把這個二維的Object[][]數組相應的坐標位置設置值。
4.1.6. 如果JSONArray對象同時包含基本元素和JSON對象數據, Json-lib底層會創建一個一維的Object[]數組, 并調用Java底層Array.set(Object array, int index, Object value)把這個一維的Object[]數組相應的坐標位置設置值。不會報錯。
4.1.7. 如果JSONArray對象同時包含基本元素、JSON數組數據或者JSON對象、JSON數組數據或者基本元素、JSON對象和JSON數組數據, Json-lib底層會創建一個二維的Object[][]數組, 我們的基本數據和動態Bean并不是數組對象,調用Java底層Array.set(Object array, int index, Object value)給這個二維的Object[][]數組相應的坐標位置設置值的時候, 就會報類型不匹配的錯誤。比如把動態Bean放到這個二維數組下標為0的位置, Object[0]是一個一維的Object[]數組, 而我們動態Bean并不是數組, 所以會報類型不匹配的錯誤。
4.1.8. 新建JSONArrayStaticToArray.java
package com.fj.ja;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;/*** JSONArray* 1. static Object toArray(JSONArray jsonArray)靜態方法, 把JSONArray對象轉換為Java對象(實際上是數組對象)。* 2. Json-lib底層自己去解析JSONArray對象。Json-lib底層會創建一個Object數組, 并調用Java底層Array.set(Object array, int index, Object value)將指定數組對象* 中索引組件的值設置為指定的新值, 來封裝JSONArray對象中的數據到Object數組。* 3. 如果JSONArray對象是簡單對象(沒有再包含JSON對象和JSON數組數據), Json-lib底層會創建一個一維的Object[]數組, 并調用Java底層Array.set(Object array, int index, Object value)* 把這個一維的Object[]數組相應的坐標位置設置值。JSONArray.toArray(JSONArray jsonArray)這個靜態方法恐怕最適合解析這種簡單的JSONArray對象。* 4. 如果JSONArray對象只包含JSON對象類型的數據, Json-lib底層會創建一個一維的Object[]數組, 在解析JSON對象類型的數據的時候調用Json-lib底層JSONObject對象的toBean(JSONObject jsonObject)* 方法, 把JSON對象類型的數據封裝到一個動態JavaBean里面(DynaBean), 然后再調用Java底層Array.set(Object array, int index, Object value)把這個一維的Object[]數組相應的坐標位置設置值。* 5. 如果JSONArray對象只包含JSON數組類型的數據, Json-lib底層會創建一個二維的Object[][]數組, 并調用Java底層Array.set(Object array, int index, Object value)* 把這個二維的Object[][]數組相應的坐標位置設置值。* 6. 如果JSONArray對象同時包含基本元素和JSON對象數據, Json-lib底層會創建一個一維的Object[]數組, 并調用Java底層Array.set(Object array, int index, Object value)* 把這個一維的Object[]數組相應的坐標位置設置值。不會報錯。* 7. 如果JSONArray對象同時包含基本元素、JSON數組數據或者JSON對象、JSON數組數據或者基本元素、JSON對象和JSON數組數據, Json-lib底層會創建一個二維的Object[][]數組, 我們的基本數據和動態Bean并不是數組對象, * 調用Java底層Array.set(Object array, int index, Object value)給這個二維的Object[][]數組相應的坐標位置設置值的時候, 就會報類型不匹配的錯誤。比如把動態Bean放到這個二維數組下標為0的位置, * Object[0]是一個一維的Object[]數組, 而我們動態Bean并不是數組, 所以會報類型不匹配的錯誤。*/ public class JSONArrayStaticToArray {public static void main(String[] args) {// 數組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網絡服務提供商isp.add("移動");isp.add("聯通");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("姿態感應器、色溫傳感器"); // Java Bean集合List<Sensor> sensorList = new ArrayList<Sensor>();sensorList.add(new Sensor(false, true, "姿態感應器、色溫傳感器"));sensorList.add(new Sensor(true, false, "姿態感應器、色溫傳感器"));sensorList.add(new Sensor(false, false, "姿態感應器、色溫傳感器"));// JSONObjectJSONObject netJsonObject = new JSONObject().accumulate("5G", "移動5G(NR)/聯通5G(NR)/電信5G(NR)").accumulate("4G", "移動/聯通/電信4G主副卡 支持 TD-LTE/LTE FDD").accumulate("3G", "主卡: 聯通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯通3G(WCDMA)").accumulate("2G", "主卡: 移動2G(GSM)/聯通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動2G(GSM)/聯通2G(GSM)/電信2G(CDMA 1X)");// JSONArrayJSONArray transferFunction = new JSONArray();transferFunction.element("NFC").element("WLAN");JSONArray jsonArray = new JSONArray(); // 這些方法一個一個的開啟baseElement(jsonArray); // jsonObjectElement(jsonArray.element(mainParam).element(sensor).element(netJsonObject)); // jsonArrayElement(jsonArray.element(mobileColor).element(isp).element(sensorList).element(transferFunction)); // baseAndJsonObjectElement(jsonArray.element(true).element(mainParam));// baseAndJsonArrayElement(jsonArray.element(true).element(mobileColor)); // jsonObjectAndJsonArrayElement(jsonArray.element(mainParam).element(isp)); // baseAndJsonObjectAndJsonArrayElement(jsonArray.element(5988).element(sensor).element(transferFunction));}/*** 只包含基本元素* @param jsonArray*/public static void baseElement(JSONArray jsonArray) {jsonArray.element("HUAWEI P40 Pro"); jsonArray.element(true); jsonArray.element(5988); jsonArray.element(2601010188703L);jsonArray.element(6.58D); jsonArray.element(JSONNull.getInstance());Object obj = JSONArray.toArray(jsonArray);Object[] objArr = (Object[])obj;for (Object object : objArr) {System.out.println(object);}}/*** 只包含JSON對象類型* @param jsonArray*/public static void jsonObjectElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray);Object[] objArr = (Object[])obj;for (Object object : objArr) {System.out.println(object);}}/*** 只包含JSON數組類型* @param jsonArray*/public static void jsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray);Object[][] obj2Arr = (Object[][])obj;for (Object[] objArr : obj2Arr) {for (Object object : objArr) {System.out.println(object);}}}/*** 基本類型和JSON對象類型。* @param jsonArray*/public static void baseAndJsonObjectElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray);Object[] objArr = (Object[])obj;for (Object object : objArr) {System.out.println(object);}}/*** 基本類型和JSON數組類型, 報array element type mismatch錯誤。* @param jsonArray*/public static void baseAndJsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray);System.out.println(obj);}/*** JSON對象類型和JSON數組類型, 報array element type mismatch錯誤。* @param jsonArray*/public static void jsonObjectAndJsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray);System.out.println(obj);}/*** 基本類型、JSON對象類型和JSON數組類型, 報array element type mismatch錯誤。* @param jsonArray*/public static void baseAndJsonObjectAndJsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray);System.out.println(obj);} }4.1.9. 運行JSONArrayStaticToArray.java
4.2. toArray(JSONArray jsonArray, JsonConfig jsonConfig)靜態方法
4.2.1. static Object toArray(JSONArray jsonArray, JsonConfig jsonConfig)靜態方法, 把JSONArray對象轉換為Java對象(實際上是數組對象)。第二個參數可以傳入一個JsonConfig對象, 我們可以給JsonConfig指定一個rootClass, 讓JSONArray數據按照rootClass的類型來解析。
4.2.2. 新建JSONArrayStaticToArrayJsonConfig.java
package com.fj.ja;import java.util.ArrayList; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JsonConfig;/*** JSONArray* 1. static Object toArray(JSONArray jsonArray, JsonConfig jsonConfig)靜態方法, 把JSONArray對象轉換為Java對象(實際上是數組對象)。* 第二個參數可以傳入一個JsonConfig對象, 我們可以給JsonConfig指定一個rootClass, 讓JSONArray數據按照rootClass的類型來解析。*/ public class JSONArrayStaticToArrayJsonConfig {public static void main(String[] args) {// 集合List<String> isp = new ArrayList<String>(); // ISP網絡服務提供商isp.add("移動");isp.add("聯通");isp.add("電信");JSONArray jsonArray = new JSONArray();jsonArray.addAll(isp); // 創建一個jsonConfig對象, 并指定它的rootClass是String.class類對象。JsonConfig jsonConfig = new JsonConfig();jsonConfig.setRootClass(String.class);Object obj = JSONArray.toArray(jsonArray, jsonConfig);String[] strArr = (String[])obj;for (String str : strArr) {System.out.println(str);}} }4.2.3. 運行JSONArrayStaticToArrayJsonConfig.java
4.3. toArray(JSONArray jsonArray, Class objectClass)靜態方法
4.3.1. static Object toArray(JSONArray jsonArray, Class objectClass)靜態方法, 把JSONArray對象轉換為Java對象(實際上是數組對象, 這個數組是指定類型)。第二個參數(objectClass)可以傳入一個類對象, 會把它設置為JSONConfig的rootClass, 會根據這個類對象類型來創建Java對象數組, 然后把JSONArray對象中的元素封裝到這個創建好的Java對象數組。
4.3.2. 新建JSONArrayStaticToArrayObjectClass.java
package com.fj.ja;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import net.sf.json.JSONArray; import net.sf.json.JSONNull; import net.sf.json.JSONObject;/*** JSONArray* 1. static Object toArray(JSONArray jsonArray, Class objectClass)靜態方法, 把JSONArray對象轉換為Java對象(實際上是數組對象, 這個數組是指定類型)。* 第二個參數(objectClass)可以傳入一個類對象, 會把它設置為JSONConfig的rootClass, 會根據這個類對象類型來創建Java對象數組, 然后把JSONArray對象中的元素封裝到這個創建好的Java對象數組。*/ public class JSONArrayStaticToArrayObjectClass {public static void main(String[] args) {// 數組String[] mobileColor = {"亮黑色", "冰霜銀", "零度白", "深海藍", "晨曦金"};// 集合List<String> isp = new ArrayList<String>(); // ISP網絡服務提供商isp.add("移動");isp.add("聯通");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("姿態感應器、色溫傳感器"); // Java Bean集合List<Sensor> sensorList = new ArrayList<Sensor>();sensorList.add(new Sensor(false, true, "姿態感應器、色溫傳感器"));sensorList.add(new Sensor(true, false, "姿態感應器、色溫傳感器"));sensorList.add(new Sensor(false, false, "姿態感應器、色溫傳感器"));// JSONObjectJSONObject netJsonObject = new JSONObject().accumulate("5G", "移動5G(NR)/聯通5G(NR)/電信5G(NR)").accumulate("4G", "移動/聯通/電信4G主副卡 支持 TD-LTE/LTE FDD").accumulate("3G", "主卡: 聯通3G(WCDMA)/電信3G(CDMA 2000); 副卡: 聯通3G(WCDMA)").accumulate("2G", "主卡: 移動2G(GSM)/聯通2G(GSM)/電信2G(CDMA 1X); 副卡: 移動2G(GSM)/聯通2G(GSM)/電信2G(CDMA 1X)");// JSONArrayJSONArray transferFunction = new JSONArray();transferFunction.element("NFC").element("WLAN");JSONArray jsonArray = new JSONArray(); // 這些方法一個一個的開啟 // singleBaseElement(jsonArray); // baseElement(jsonArray); // mapJsonObjectElement(jsonArray.element(mainParam)); // beanJsonObjectElement(jsonArray.element(sensor)); // jsonObjectJsonObjectElement(jsonArray.element(netJsonObject));jsonObjectElement(jsonArray.element(mainParam).element(sensor).element(netJsonObject)); // arrayListJsonArrayJsonArrayElement(jsonArray.element(transferFunction).element(isp).element(transferFunction)); // listJsonObjectJsonArrayElement(jsonArray.element(sensorList));// baseAndJsonObjectElement(jsonArray.element(true).element(mainParam)); // baseAndJsonArrayElement(jsonArray.element(true).element(mobileColor)); // jsonObjectAndJsonArrayElement(jsonArray.element(mainParam).element(isp)); // baseAndJsonObjectAndJsonArrayElement(jsonArray.element(5988).element(sensor).element(transferFunction));}/*** 只包含單一類型的基本元素* @param jsonArray*/public static void singleBaseElement(JSONArray jsonArray) {jsonArray.element(2988); jsonArray.element(3988); jsonArray.element(5988); jsonArray.element(4988); // 這個JSONArray只包含int類型, 所以我們傳入了Integer.class類對象。根據Integer.class類對象創建Java數組, 來封裝JSONArray中的數據。Object obj = JSONArray.toArray(jsonArray, Integer.class);Integer[] intArr = (Integer[])obj;for (Integer item : intArr) {System.out.println(item);}}/*** 只包含基本元素* @param jsonArray*/public static void baseElement(JSONArray jsonArray) {jsonArray.element("HUAWEI P40 Pro"); jsonArray.element(true); jsonArray.element(5988); jsonArray.element(2601010188703L);jsonArray.element(6.58D); jsonArray.element(JSONNull.getInstance());// 這個JSONArray包含String、boolean、int、long、double、JSONNull類型, 所以我們傳入了Object.class類對象。Object obj = JSONArray.toArray(jsonArray, Object.class);Object[] objArr = (Object[])obj;for (Object object : objArr) {System.out.println(object);}}/*** 只包含Map對象的JSON對象類型* @param jsonArray*/public static void mapJsonObjectElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, Map.class);Map<String, String>[] mapArr = (Map<String, String>[])obj;for (Map<String, String> map : mapArr) {for (Entry<String, String> kv : map.entrySet()) {System.out.println(kv.getKey() + ":" + kv.getValue());}}}/*** 只包含JavaBean對象的JSON對象類型* @param jsonArray*/public static void beanJsonObjectElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, Sensor.class);Sensor[] sensorArr = (Sensor[])obj;for (Sensor sensor : sensorArr) {System.out.println(sensor);}}/*** 只包含JSONObject對象的JSON數組類型* @param jsonArray*/public static void jsonObjectJsonObjectElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, JSONObject.class);JSONObject[] jsonObjectArr = (JSONObject[])obj;for (JSONObject jsonObject : jsonObjectArr) {System.out.println(jsonObject);}}/*** 同時包含Map對象、JavaBean對象、JSONObject對象三種JSON對象類型, 可以傳入一個Map.class類對象, 可以把這三種類型按鍵和值封裝到Map對象里。* @param jsonArray*/public static void jsonObjectElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, Map.class);Map<String, Object>[] mapArr = (Map<String, Object>[])obj;for (Map<String, Object> map : mapArr) {for (Entry<String, Object> kv : map.entrySet()) {System.out.println(kv.getKey() + ":" + kv.getValue());}}}/*** 包含簡單數組、集合、JSONArray的JSON數組類型, 會吧它們中的每一項按指定類型解析。* 如果內部JSON數組包含String、boolean、int、long、double、JSONNull多種類型的簡單數據, 也可以指定Object.class類對象。* @param jsonArray*/public static void arrayListJsonArrayJsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, String.class);String[][] str2Arr = (String[][])obj;for (String[] strArr : str2Arr) {for (String str : strArr) {System.out.println(str);}}}/*** 只包含單一類型的JSONObject的JSON數組類型, 會吧它們中的每一JSONObject項按指定類型解析。* @param jsonArray*/public static void listJsonObjectJsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, Sensor.class);Sensor[][] Sensor2Arr = (Sensor[][])obj;for (Sensor[] SensorArr : Sensor2Arr) {for (Sensor sensor : SensorArr) {System.out.println(sensor);}}}/*** 基本類型和JSON對象類型。我們無法準確的指定一個類型, 基本類型數據按照什么類型來解析, JSON對象類型數據按照什么類型來解析。傳入一個Object.class類對象, 那么JSON對象類型的數據, 為Object對象分配鍵和值的時候會失敗。* @param jsonArray*/public static void baseAndJsonObjectElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, Object.class);System.out.println(obj);}/*** 基本類型和JSON數組類型, 報array element type mismatch錯誤。* @param jsonArray*/public static void baseAndJsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, Object.class);System.out.println(obj);}/*** JSON對象類型和JSON數組類型, 報array element type mismatch錯誤。* @param jsonArray*/public static void jsonObjectAndJsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, Object.class);System.out.println(obj);}/*** 基本類型、JSON對象類型和JSON數組類型, 報array element type mismatch錯誤。* @param jsonArray*/public static void baseAndJsonObjectAndJsonArrayElement(JSONArray jsonArray) {Object obj = JSONArray.toArray(jsonArray, Object.class);System.out.println(obj);} }4.3.3. 運行JSONArrayStaticToArrayObjectClass.java
總結
以上是生活随笔為你收集整理的005_JSONArray对象静态方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 004_JSONArray对象公共方法
- 下一篇: 006_JSONObject对象公共方法