Java Object to JSON
一开始的时候,使用Jackson的ObjectMapper来转,每个JSON对象都要建模,如果那个JSON嵌套了4层,就得写4个Java Class,而且一个list里面还可以放不同类型的对象,要是哪天需求一改,就得从一堆class里面挖宝(雷)。使用Java的强类型对灵活的JSON对象建模,在现在多变的业务环境下,真的没有什么优势。
后来看到JDK里面有这么一个写法:
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,当作语法糖。
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(); }}
使用示范:
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的效果。
{ "name": ${name}, "friends": [ { "name": ${friend} } ]}
目前的Java还做不出来,期待Java语法的改进。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。