Java Object to JSON

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Object to JSON相关的知识,希望对你有一定的参考价值。

一开始的时候,使用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 Object to JSON的主要内容,如果未能解决你的问题,请参考以下文章

jsonobject 怎么封装java中Date类型的数据

java中object数据怎么转换成json数据

jsonobject接受不了数组吗

java.lang.NoSuchMethodError: org.json.JSONObject.<init>(Ljava/lang/Object;)V

如何将java中的map转换成jsonobject

java 强转对象 object向下转型自定义的类,为啥eclipse会报黄线?