一開始的時候,使用Jackson的ObjectMapper來轉,每一個JSON對象都要建模,若是那個JSON嵌套了4層,就得寫4個Java Class,並且一個list裏面還能夠放不一樣類型的對象,要是哪天需求一改,就得從一堆class裏面挖寶(雷)。使用Java的強類型對靈活的JSON對象建模,在如今多變的業務環境下,真的沒有什麼優點。
後來看到JDK裏面有這麼一個寫法:html
JsonObject value = Json.createObjectBuilder() .add("firstName", "John") .add("lastName", "Smith") .add("age", 25) .add("address", Json.createObjectBuilder() .add("streetAddress", "21 2nd Street") .add("city", "New York") .add("state", "NY") .add("postalCode", "10021")) .add("phoneNumber", Json.createArrayBuilder() .add(Json.createObjectBuilder() .add("type", "home") .add("number", "212 555-1234")) .add(Json.createObjectBuilder() .add("type", "fax") .add("number", "646 555-4567"))) .build();
看着就很爽,一眼就能夠看清整個JSON的結構,好寫好看。但是這種寫法,要用到json-lib,json-lib不建議用在1.7或以上的Java,緣由在此。
因而基於fastjson,本身寫了一個這樣的builder,看成語法糖。json
public class JsonObjectBuilder { private JSONObject obj = new JSONObject(); public JsonObjectBuilder add(String key, Object value) { obj.put(key, value); return this; } public JSONObject build() { return obj; } }
public class JsonArrayBuilder { private JSONArray array = new JSONArray(); public JsonArrayBuilder add(Object item) { array.add(item); return this; } public JSONArray build() { return array; } }
public class JsonBuilder { public static JsonObjectBuilder newObject() { return new JsonObjectBuilder(); } public static JsonArrayBuilder newArray() { return new JsonArrayBuilder(); } }
使用示範:app
JSONObject obj = JsonBuilder.newObject() .add("name", "Andy") .add("age", 28) .add("friends", JsonBuilder.newArray() .add(JsonBuilder.newObject() .add("name", "Maggie") .add("hobby", "hike") .build()) .add(JsonBuilder.newObject() .add("name", "Tonny") .add("city", "hongkong") .build()) .build()) .build();
作是作出來了,但還不是我最終想要的東西,我最想要的是相似JavaScript的效果。ide
{ "name": ${name}, "friends": [ { "name": ${friend} } ] }
目前的Java還作不出來,期待Java語法的改進。post