Fastjson封裝使用(二)

一嚷堡、前言:

上一篇:Fastjson使用(一):
http://www.reibang.com/p/807c6f8c68f0

fastjson是阿里巴巴推出的json工具蝌戒,號(hào)稱是最快的。如果基本用法不會(huì)桩匪,請(qǐng)先看上一篇文章:

今天傻昙,主要寫一下封裝的工具類屋匕,然后是數(shù)據(jù)解析這一塊,我發(fā)現(xiàn)后臺(tái)給我們的數(shù)據(jù)蔗衡,有時(shí)候嵌套層級(jí)比較多绞惦,我們不好進(jìn)行數(shù)據(jù)解析洋措。看完本篇文章贺嫂,不管多么深的層級(jí)第喳,都能輕易的解析曲饱。

 //fastJson依賴
 compile 'com.alibaba:fastjson:1.2.55'

二扩淀、工具類:

  1. JsonUtil類:(我喜歡用這個(gè)引矩,演示用的是這個(gè)類)
/**
 * Created by luo on 2019/7/15.
 * Json 工具類旺韭,支持各種數(shù)據(jù)類型轉(zhuǎn)換(建議用這個(gè))
 */

public class JsonUtil {
    /***
     * object 轉(zhuǎn)成json
     * @param root
     * @return
     */
    public static String convertObjectToJson(Object root) {
        
        String resutlString = "";
        try {
            resutlString = JSON.toJSONString(root);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return resutlString;
    }
    
    
    /***
     * json轉(zhuǎn)成object
     * @param
     * @return
     */
    public static<T> T convertJsonToObject(String json,Class<T> clazz) {
        T readValue = null;
        try {   
            readValue = JSON.parseObject(json, clazz);
        } catch (Exception e) {
        }       
        
        return readValue;
    }
    
    
    
    /**
     * 功能描述:把JSON數(shù)據(jù)轉(zhuǎn)換成普通字符串列表
     * 
     * @param jsonData
     *            JSON數(shù)據(jù)
     *
     * @return
     * @throws Exception
     *
     */
    public static List<String> convertJsonToObjectList(String jsonData) throws Exception {
        return JSON.parseArray(jsonData, String.class);
    }

    /**
     * 功能描述:把JSON數(shù)據(jù)轉(zhuǎn)換成jsonObject
     * 
     * @param jsonData
     *            JSON數(shù)據(jù)
     * @return
     * @throws Exception
     * 
     */
    public static JSONObject convertJsonToObject(String jsonData) throws Exception {
        return JSON.parseObject(jsonData);
    }

    
    /**
     * 功能描述:把JSON數(shù)據(jù)轉(zhuǎn)換成指定的java對(duì)象列表
     * 
     * @param json
     *            JSON數(shù)據(jù)
     * @param clazz
     *            指定的java對(duì)象
     * @return
     * @throws Exception
     */
    public static <T> List<T> convertJsonToObjectObjList(String json, Class<T> clazz)
            throws Exception {
        return JSON.parseArray(json, clazz);
    }

    /**
     * 功能描述:把JSON數(shù)據(jù)轉(zhuǎn)換成較為復(fù)雜的java對(duì)象列表
     * 
     * @param json
     *            JSON數(shù)據(jù)
     * @return
     * @throws Exception
     */
    public static List<Map<String, Object>> convertJsonToObjectMapList(String json)
            throws Exception {
        return JSON.parseObject(json,
                new TypeReference<List<Map<String, Object>>>() {
                });
    }


    /**
     * 將網(wǎng)絡(luò)請(qǐng)求下來(lái)的數(shù)據(jù)用fastjson處理空的情況,并將時(shí)間戳轉(zhuǎn)化為標(biāo)準(zhǔn)時(shí)間格式
     * @param result
     * @return
     */
    public static String dealResponseResult(String result) {
        result = JSONObject.toJSONString(result,
                SerializerFeature.WriteClassName,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteNullBooleanAsFalse,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullNumberAsZero,
                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.WriteDateUseDateFormat,
                SerializerFeature.WriteEnumUsingToString,
                SerializerFeature.WriteSlashAsSpecial,
                SerializerFeature.WriteTabAsSpecial);
        return result;
    }
}
  1. JsonUtils類:
/**
 * Created by luo on 2019/7/15.
 * Json 工具類,支持各種數(shù)據(jù)類型轉(zhuǎn)換
 * 
 */

public class JsonUtils {


    /**
     * 默認(rèn)日期格式(年月日時(shí)分秒)
     */
    public static final String default_dateFormat = "yyyy-MM-dd HH:mm:ss";
    /**
     * 存在時(shí)間格式(年月日)
     */
    public static final String dateFormat = "yyyy-MM-dd";

    /**
     * json字符串轉(zhuǎn)對(duì)象
     * @param str 字符串
     * @param clazz 需要轉(zhuǎn)成想要的對(duì)象
     * @param <T> 返回相應(yīng)對(duì)象
     * @return
     */
    public static <T> T jsonToObject(String str,Class<T> clazz) {
        return JSON.parseObject(str,clazz);
    }


    /**
     * json格式解析為L(zhǎng)ist集合沥邻,不解決格式時(shí)間問題
     * @param str json字符串
     * @param clazz 要轉(zhuǎn)換的對(duì)象
     * @param <T>
     * @return
     */
    public static <T> List<T> jsonTolist(String str, Class<T> clazz) {

        return JSON.parseArray(str,clazz);
    }

    /**
     * 對(duì)象轉(zhuǎn)json字符串唐全,默認(rèn)不執(zhí)行進(jìn)行日期轉(zhuǎn)換
     *
     * @param obj 對(duì)象
     * @return
     */
    public static String ObjectTojson(Object obj) {

        return ObjectTojson(obj, false);
    }

    /**
     * 對(duì)象轉(zhuǎn)json字符串邮利,使用默認(rèn)日期轉(zhuǎn)換
     *
     * @param obj 對(duì)象
     * @param useDateFormat 自定義時(shí)間格式
     * @return
     */
    public static String ObjectTojson(Object obj, boolean useDateFormat) {

        return ObjectTojson(obj, useDateFormat, default_dateFormat);
    }

    /**
     * 自定義日期格式
     * @param obj
     * @param dateFormat
     * @return
     */
    public static String ObjectTojson(Object obj, String dateFormat) {

        return ObjectTojson(obj, true, dateFormat);

    }

    /**
     * 對(duì)象轉(zhuǎn)字符串延届,總處理方法方庭,不對(duì)外開放
     * @param obj javabean對(duì)象
     * @param useDateFormat
     * @param dateFormat
     * @return
     */
    private static String ObjectTojson(Object obj, boolean useDateFormat, String dateFormat) {
        if (useDateFormat) {
            return JSON.toJSONStringWithDateFormat(obj, dateFormat);
        }
        return JSON.toJSONString(obj);

    }
    
}

三、使用:

1. User類

public class User implements Serializable {

    private String name;
    private String phone;
    private int age;
    private String company;
    //必須用空參構(gòu)造
   public User() {
    }
}

2. UserGroup類

public class UserGroup implements Serializable{

private String name;
private List<User> users = new ArrayList<User>();
//必須用空參構(gòu)造
public UserGroup() {
}

}

3. UserGroup類

//初始化對(duì)象
User user =  new User("小明","15618273672",27,"伯俊公司");

@OnClick({R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4, R.id.btn_5, R.id.btn_6, R.id.btn_7})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_1:
                //對(duì)象轉(zhuǎn) Json 數(shù)據(jù)
                String str =  JsonUtil.convertObjectToJson(user);
                Log.d("LUO","======"+str);
                //{"age":27,"company":"伯俊公司","name":"小明","phone":"15618273672"}
                break;
            case R.id.btn_2:
                String jsonString2 =  JsonUtil.convertObjectToJson(user);
                //Json數(shù)據(jù)轉(zhuǎn)對(duì)象
                User user1 = JsonUtil.convertJsonToObject(jsonString2,User.class);
                Log.d("LUO","======"+user1);
                //com.function.luo.fastjsondemo.User@555d8c2
                break;
            case R.id.btn_3:
                List<User> UserList = new ArrayList<User>();
                UserList.add(new User("小紅","15618273672",27,"伯俊公司1"));
                UserList.add(new User("小亮","15618273677",25,"伯俊公司2"));
                UserList.add(new User("小濤","15618273676",24,"伯俊公司3"));


                List<UserGroup> userGroupList = new ArrayList<UserGroup>();
                userGroupList.add(new UserGroup("項(xiàng)目一",UserList));
                userGroupList.add(new UserGroup("項(xiàng)目二",UserList));
                userGroupList.add(new UserGroup("項(xiàng)目三",UserList));
                //集合對(duì)象轉(zhuǎn) Json 數(shù)據(jù)
                String jsonString3 =  JsonUtil.convertObjectToJson(userGroupList);
                Log.d("LUO","======"+jsonString3);
                //[{"name":"項(xiàng)目一","users":[{"age":27,"company":"伯俊公司1","name":"小紅","phone":"15618273672"},{"age":25,"company":"伯俊公司2","name":"小亮","phone":"15618273677"},{"age":24,"company":"伯俊公司3","name":"小濤","phone":"15618273676"}]},{"name":"項(xiàng)目二","users":[{"$ref":"$[0].users[0]"},{"$ref":"$[0].users[1]"},{"$ref":"$[0].users[2]"}]},{"name":"項(xiàng)目三","users":[{"$ref":"$[0].users[0]"},{"$ref":"$[0].users[1]"},{"$ref":"$[0].users[2]"}]}]

                break;
            case R.id.btn_4:
                List<User> UserList2 = new ArrayList<User>();
                UserList2.add(new User("小紅","15618273672",27,"伯俊公司1"));
                UserList2.add(new User("小亮","15618273677",25,"伯俊公司2"));
                UserList2.add(new User("小濤","15618273676",24,"伯俊公司3"));


                String jsonString4 =  JsonUtil.convertObjectToJson(UserList2);

                //Json 數(shù)據(jù)轉(zhuǎn)集合對(duì)象
                List<User> UserList3 = null;
                try {
                    UserList3 = JsonUtil.convertJsonToObjectObjList(jsonString4,User.class);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                Log.d("LUO","======"+UserList3);
                //[com.function.luo.fastjsondemo.User@d12877d, com.function.luo.fastjsondemo.User@dd9f672, com.function.luo.fastjsondemo.User@d10dac3]

                break;
            case R.id.btn_5:
                try{
                    String str2 =   JsonUtil.convertObjectToJson(user);
                    //json 數(shù)據(jù)轉(zhuǎn)對(duì)象
                    User user = JsonUtil.convertJsonToObject(str2,User.class);
                    Log.d("LUO","======"+user);
                    //com.function.luo.fastjsondemo.User@8c51e79
                }catch (Exception e){
                    e.printStackTrace();
                }

                break;
            case R.id.btn_6:
                //二層嵌套解析
                parseData();
                break;
            case R.id.btn_7:
                //三層嵌套解析
                parseData7();
                break;
            default:
                break;
        }
    }

4. Animal類

public class Animal implements Serializable{

public String result;
public String message;
private Data data;
//必須有默認(rèn)空參構(gòu)造
public Animal() {
} 

}

4. Animal類

public class Animal implements Serializable{

    public String result;
    public String message;
    private Data data;
    //必須有默認(rèn)空參構(gòu)造
    public Animal() {
    } 
}

5. Data類

public class Data implements Serializable{
    private int id;
    private String store;
    private List<Dog> dog = new ArrayList<Dog>();
  //必須有默認(rèn)空參構(gòu)造
    public Data() {
    }
}

6. Dog類

public class Dog implements Serializable{

    private String name;
    private int age;
    private String address;
  //必須有默認(rèn)空參構(gòu)造
    public Dog() {
    }
 }

7. 二層嵌套

數(shù)據(jù)示例:

二層嵌套數(shù)據(jù).png

代碼示例:

  /**
     * 解析二層嵌套示例
     * @
     */
    private void parseData() {

        List<User> UserList = new ArrayList<User>();
        UserList.add(new User("小紅","15618273672",27,"伯俊公司1"));
        UserList.add(new User("小亮","15618273677",25,"伯俊公司2"));
        UserList.add(new User("小濤","15618273676",24,"伯俊公司3"));


        UserGroup userGroup = new UserGroup("項(xiàng)目一",UserList);
        String jsonString = JsonUtils.ObjectTojson(userGroup);
        Log.d("LUO","======"+jsonString);
        //{"name":"項(xiàng)目一","users":[{"age":27,"company":"伯俊公司1","name":"小紅","phone":"15618273672"},{"age":25,"company":"伯俊公司2","name":"小亮","phone":"15618273677"},{"age":24,"company":"伯俊公司3","name":"小濤","phone":"15618273676"}]}


        try {
            //轉(zhuǎn)化為JSONObject對(duì)象
            JSONObject json = JsonUtil.convertJsonToObject(jsonString);

            //獲取name 值
            String name = String.valueOf(json.get("name"));
            Log.d("LUO","name======"+name);
            //name======項(xiàng)目一
            //獲取 users 集合的值
            List<User> userList = JsonUtil.convertJsonToObjectObjList(json.getJSONArray("users").toString(), User.class);
            Log.d("LUO","======"+userList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

8. 三層嵌套

數(shù)據(jù)示例:


三層嵌套數(shù)據(jù).png

代碼示例:

 /**
     * 多級(jí)嵌套網(wǎng)絡(luò)請(qǐng)求
     */
    private void parseData7() {

        Animal animal = new Animal();
        Data data = new Data();

        List<Dog> dogList = new ArrayList<>();
        Dog dog1 = new Dog();
        dog1.setAddress("上海市,閔行625 號(hào)");
        dog1.setAge(8);
        dog1.setName("小狗 1");

        Dog dog2 = new Dog();
        dog2.setAddress("上海市,閔行626 號(hào)");
        dog2.setAge(9);
        dog2.setName("小狗 2");

        Dog dog3 = new Dog();
        dog3.setAddress("上海市圃阳,閔行625 號(hào)");
        dog3.setAge(6);
        dog3.setName("小狗 3");

        dogList.add(dog1);
        dogList.add(dog2);
        dogList.add(dog3);
        data.setDog(dogList);
        data.setStore("閔行店");
        data.setId(10);

        animal.setData(data);
        animal.setResult("200");
        animal.setMessage("請(qǐng)求成功");



        String jsonStr = JsonUtil.convertObjectToJson(animal);
        Log.d("LUO","======"+jsonStr);
        try {
            //{"data":{"dog":[{"address":"上海市褐耳,閔行625 號(hào)","age":8,"name":"小狗 1"},{"address":"上海市,閔行626 號(hào)","age":9,"name":"小狗 2"},{"address":"上海市,閔行625 號(hào)","age":6,"name":"小狗 3"}],"id":1,"store":"閔行店"},"message":"請(qǐng)求成功","result":"200"}

            JSONObject json =  JsonUtil.convertJsonToObject(jsonStr);
            //看清是值還是對(duì)象,值用get()或getIntValue()寄纵,對(duì)象用getJSONObject()
            //獲取 result 值
            String result = (String) json.get("result");
            //獲取 message 值
            String message = (String) json.get("message");
            //獲取 data 下面的 id 值
            int id = json.getJSONObject("data").getIntValue("id");
            //獲取 data 下面的 store 值
           String store = json.getJSONObject("data").getString("store");
            //獲取 data 下面的 dog集合值(看清是集合還是對(duì)象,集合用getJSONArray()脖苏,對(duì)象用getJSONObject())
            List<Dog> dogList1 = JsonUtil.convertJsonToObjectObjList(json.getJSONObject("data").getJSONArray("dog").toString(), Dog.class);

            Log.d("LUO","result======"+result);
            // result======200
            Log.d("LUO","message======"+message);
            // message======請(qǐng)求成功
            Log.d("LUO","id======"+id);
            //id======10
            Log.d("LUO","store======"+store);
            //store======閔行店
            Log.d("LUO","======"+dogList1);


        } catch (Exception e) {
            e.printStackTrace();
        }

    }

四程拭、注意:

  1. 低版本中,如果JavaBean中沒有默認(rèn)構(gòu)造函數(shù)(顯式或默認(rèn))棍潘,運(yùn)行時(shí)將直接拋出 “default constructor not found” 的異常信息恃鞋,如下:
image.png
  1. 高版本中,反序列化時(shí)JSON會(huì)首先嘗試調(diào)用默認(rèn)構(gòu)造函數(shù)亦歉,如果沒有默認(rèn)構(gòu)造函數(shù)恤浪,則會(huì)尋找相匹配的有參構(gòu)造函數(shù)。如果已經(jīng)存在有參構(gòu)造函數(shù)肴楷,但并沒有提供默認(rèn)構(gòu)造函數(shù)時(shí)水由,某些場(chǎng)景下會(huì)出現(xiàn)反序列化的對(duì)象的屬性值為空的情況,因此建議赛蔫,JavaBean存在有參構(gòu)造函數(shù)時(shí)砂客,都顯式提供默認(rèn)構(gòu)造函數(shù)。 GitHub上也有人提出了相同的問題呵恢,詳見這里

五鞠值、總結(jié):

  1. JavaBean中必須寫默認(rèn)構(gòu)造函數(shù);
  2. 將對(duì)象轉(zhuǎn)化為 Json 數(shù)據(jù)
 String str =  JsonUtil.convertObjectToJson(user);

解釋:將對(duì)象轉(zhuǎn)化為 Json 數(shù)據(jù)

  1. Json數(shù)據(jù)轉(zhuǎn)對(duì)象
 User user1 = JsonUtil.convertJsonToObject(jsonString2,User.class);

解釋:Json數(shù)據(jù)轉(zhuǎn)對(duì)象

  1. 集合對(duì)象轉(zhuǎn) Json 數(shù)據(jù)
 String jsonString3 =  JsonUtil.convertObjectToJson(userGroupList);

解釋:集合對(duì)象轉(zhuǎn) Json 數(shù)據(jù)

  1. Json 數(shù)據(jù)轉(zhuǎn)集合對(duì)象
 List<User> UserList3 = null;
 try {
    UserList3 = JsonUtil.convertJsonToObjectObjList(jsonString4,User.class);
     } catch (Exception e) {
        e.printStackTrace();
 }
  1. 轉(zhuǎn)化為JSONObject對(duì)象
JSONObject json = JsonUtil.convertJsonToObject(jsonString);

注意:JSONObject就是一個(gè)對(duì)象渗钉,我們可以獲取對(duì)象的屬性彤恶,可以獲取對(duì)象中的對(duì)象,也可以獲取對(duì)象中的集合晌姚。

  1. 獲取值:
//獲取name 值
-  json.get()
-  json.getString()
- json.getBigInteger()
- getDouble()
- getFloat()
- getIntValue()
- getInteger()
- getBoolean()
  1. 獲取對(duì)象的值:
- json.getJSONObject("data")

//獲取 data 對(duì)象下面的 id 值
int id = json.getJSONObject("data").getIntValue("id");
  1. 獲取對(duì)象下面的集合對(duì)象的值:
- json.getJSONArray("users")

 //獲取 users 集合的值
List<User> userList = JsonUtil.convertJsonToObjectObjList(json.getJSONArray("users").toString(), User.class);
  1. JSONObject 集合
JSONObject jsonObject = new JSONObject();
 try {
     jsonObject.put("pageNo", number);
     jsonObject.put("querySide", "1");
     jsonObject.put("pageSize", "15");
     jsonObject.put("userIdEnc", userIdEnc);

 } catch (JSONException e) {
    e.printStackTrace();
 }

六粤剧、項(xiàng)目 gitHub 地址:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挥唠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌焕议,老刑警劉巖宝磨,帶你破解...
    沈念sama閱讀 223,207評(píng)論 6 521
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弧关,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唤锉,警方通過查閱死者的電腦和手機(jī)世囊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,455評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窿祥,“玉大人株憾,你說我怎么就攤上這事∩柜茫” “怎么了嗤瞎?”我有些...
    開封第一講書人閱讀 170,031評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)听系。 經(jīng)常有香客問我贝奇,道長(zhǎng),這世上最難降的妖魔是什么靠胜? 我笑而不...
    開封第一講書人閱讀 60,334評(píng)論 1 300
  • 正文 為了忘掉前任掉瞳,我火速辦了婚禮,結(jié)果婚禮上浪漠,老公的妹妹穿的比我還像新娘陕习。我一直安慰自己,他們只是感情好址愿,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,322評(píng)論 6 398
  • 文/花漫 我一把揭開白布该镣。 她就那樣靜靜地躺著,像睡著了一般必盖。 火紅的嫁衣襯著肌膚如雪拌牲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,895評(píng)論 1 314
  • 那天歌粥,我揣著相機(jī)與錄音塌忽,去河邊找鬼。 笑死失驶,一個(gè)胖子當(dāng)著我的面吹牛土居,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嬉探,決...
    沈念sama閱讀 41,300評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼擦耀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了涩堤?” 一聲冷哼從身側(cè)響起眷蜓,我...
    開封第一講書人閱讀 40,264評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胎围,沒想到半個(gè)月后吁系,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體德召,經(jīng)...
    沈念sama閱讀 46,784評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,870評(píng)論 3 343
  • 正文 我和宋清朗相戀三年汽纤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了上岗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,989評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蕴坪,死狀恐怖肴掷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情背传,我是刑警寧澤呆瞻,帶...
    沈念sama閱讀 36,649評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站续室,受9級(jí)特大地震影響栋烤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜挺狰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,331評(píng)論 3 336
  • 文/蒙蒙 一明郭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丰泊,春花似錦薯定、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,814評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至学赛,卻和暖如春年堆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盏浇。 一陣腳步聲響...
    開封第一講書人閱讀 33,940評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工变丧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绢掰。 一個(gè)月前我還...
    沈念sama閱讀 49,452評(píng)論 3 379
  • 正文 我出身青樓痒蓬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滴劲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子攻晒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,995評(píng)論 2 361