Java - net.sf.json 之 put、accumulate、element 實踐與疑問

net.sf.json

net.sf.json 須要的 jar


注意版本,個別版本之間會衝突。
 java

Java 代碼:

package com.code.ggsddu;
 
import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class TestJSON {
    public static void main(String[] args) {
        /**
         * public Object put(Object key, Object value)
         * 將value映射到key下
         * 若是此JSONObject對象以前存在一個value在這個key下,那麼當前的value會替換掉以前的value
         */
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("one", "first");
        // jsonObject: {"one":"first"}
        System.out.println("jsonObject: " + jsonObject.toString());
 
        jsonObject.put("two", "second");
        // jsonObject: {"one":"first","two":"second"}
        System.out.println("jsonObject: " + jsonObject.toString());
 
        jsonObject.put("two", "cover");
        // jsonObject: {"one":"first","two":"cover"}
        System.out.println("jsonObject: " + jsonObject.toString());
 
        jsonObject.put("one", null);// value爲null的話,直接移除key
        // jsonObject: {"two":"cover"}
        System.out.println("jsonObject: " + jsonObject.toString());
 
        /**
         * public JSONObject accumulate(String key, Object value)
         * 累積value到這個key下
         * 1.若是當前已經存在一個value在這個key下,那麼會有一個JSONArray將存儲在這個key下來保存全部累積的value
         * 2.若是已經存在一個JSONArray,那麼當前的value就會添加到這個JSONArray中
         */
        JSONObject jsonObj = new JSONObject();
        jsonObj.accumulate("Servers", null);// 容許value爲null
        jsonObj.accumulate("Servers", "Tomcat");
        jsonObj.put("Codes", "Java");
        jsonObj.accumulate("Codes", "JavaScript");
        // jsonObj: {"Servers":[null,"Tomcat"],"Codes":["Java","JavaScript"]}
        System.out.println("jsonObj: " + jsonObj.toString());
 
        /**
         * public JSONObject element(String key, Object value)
         */
        JSONObject object = new JSONObject();
        object.element("price", "500");
        object.element("price", "1000");
        // object: {"price":"1000"} 疑問: 這和put有何區別??? 說好的會調用accumulate呢???
        System.out.println("object: " + object.toString());
    }
}

 

控制檯打印結果:

jsonObject: {"one":"first"}
jsonObject: {"one":"first","two":"second"}
jsonObject: {"one":"first","two":"cover"}
jsonObject: {"two":"cover"}
jsonObj: {"Servers":[null,"Tomcat"],"Codes":["Java","JavaScript"]}
object: {"price":"1000"}

 

疑問:

net.sf.json.element :
Put a key/value pair in the JSONObject. If the value is null, then the key will be removed from the JSONObject if it is present. If there is a previous value assigned to the key, it will call accumulate.
 
大意爲:將鍵/值對放到這個 JSONObject 對象裏面。若是當前 value 爲 null,那麼若是這個 key 存在的話,這個 key 就會移除掉。若是這個 key 以前有 value ,那麼此方法會調用 accumulate 方法。

親測element ,卻不盡然,結果並非如上的預期的效果。爲何呢?json

相關文章
相關標籤/搜索