标签:Java name Object add JSON JsonBuilder build return public
一开始的时候,使用Jackson的ObjectMapper来转,每个JSON对象都要建模,如果那个JSON嵌套了4层,就得写4个Java Class,而且一个list里面还可以放不同类型的对象,要是哪天需求一改,就得从一堆class里面挖宝(雷)。
后来看到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语法的改进。
标签:Java,name,Object,add,JSON,JsonBuilder,build,return,public 来源: https://blog.51cto.com/wikiou/2428360
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。