1. 程式人生 > >net.sf.json - put、accumulate、element

net.sf.json - put、accumulate、element

rip object 一個 clas package args 之間 對象 src

net.sf.json 需要的 jar:

技術分享

註意版本,部分版本之間會沖突。

package com.ikoo;

import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class TestJSON {
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        /**
         * public Object put(Object key, Object value)
         * 將value映射到key下
         * 如果此JSONObject對象之前存在一個value在這個key下,那麽當前的value會替換掉之前的value
         */
        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"}

P.S. 網上的帖子對 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.

翻譯:

public JSONObject element (String key, Object value) 將鍵/值對放到這個JSONObject對象裏面。如果當前value為空(null),那麽如果這個key存在的話,這個key就會移除掉。如果這
個key之前有value值,那麽此方法會調用accumulate()方法。

但是,親測,卻不盡然,結果並不是如上的預期的效果。所以就納悶了,網上關於這樣的帖子好多,都是一樣的,想必是直接 CV 大法,不過我就是很納悶,為何 element 不是文檔說的那樣?!

net.sf.json - put、accumulate、element