国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

JSON簡介及C代碼展示JSON消息示例

開發 開發工具
本文首先對JSON進行簡單的介紹,然后用具體的C代碼示范了各類JSON消息的構造方法。

在互聯網軟件前端與后臺進行消息交互的過程中,需要有一種標準的數據交換格式供前后端采用。在眾多的數據交換格式中,JSON(JavaScript Object Notation,JS 對象標記)是應用得比較廣泛的,它采用完全獨立于編程語言的文本格式來存儲和表示數據。JSON的層次結構簡潔、清晰,易于閱讀和編寫,同時也易于機器解析和生成,這有效地提升了網絡傳輸效率。

[[192401]]

本文首先對JSON進行簡單的介紹,然后用具體的C代碼示范了各類JSON消息的構造方法。

JSON簡介

JSON 的語法規則可以用下面的四句話來概括:

  • ***,對象表示為鍵值對。
  • 第二,數據由逗號分隔。
  • 第三,花括號保存對象。
  • 第四,方括號保存數組。

具體而言,鍵值對組合中的鍵名寫在前面并用雙引號包裹,鍵值使用冒號分隔,冒號后面緊接著值,如:”name”: “zhou”;數組是用方括號包裹起來的,如:[“zhou”, “zhang”]。

JSON消息示例

本部分用實際的C代碼來示范了各類常用的JSON消息的構造方法。在編寫代碼之前,要到https://sourceforge.net/projects/cjson/上去下載C語言版的JSON封裝API。

在JSON的API中,我們常用到的有如下幾個函數:

1)cJSON_CreateObject():創建JSON對象。

2)cJSON_Delete(cJSON *c):刪除一個JSON結構。

3)cJSON_AddStringToObject(object,name,s):將一個字符串添加到對象中。

4)cJSON_AddNumberToObject(object,name,n):將一個整數添加到對象中。

5)cJSON_Print(cJSON *item):將JSON消息以文本消息的樣式輸出。

6)cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item):將一個數據(通常為對象)添加到一個對象中。

7)cJSON_CreateString(const char *string):生成字符串數據。

8)cJSON_AddItemToArray(cJSON *array, cJSON *item):將一個數據添加到一個數組中。

9)cJSON_CreateArray():創建JSON數組。

下面,我們開始編寫C代碼來生成JSON消息。

1. 如果要實現如下JSON消息:

  1.     name:"zhou", 
  2.     age:30 

則編寫C代碼函數如下:

  1. int MakeJsonNameAge(char *pszJsonContent, int iJsonLen) 
  2.     cJSON *root = NULL
  3.     char  *out  = NULL
  4.  
  5.     // 判斷函數參數是否合法 
  6.     if (pszJsonContent == NULL) 
  7.     { 
  8.         printf("MakeJsonNameAge: pszJsonContent is NULL!"); 
  9.  
  10.         return -1; 
  11.     } 
  12.  
  13.     root = cJSON_CreateObject(); 
  14.     if(NULL == root) 
  15.     { 
  16.         printf("MakeJsonNameAge: exec cJSON_CreateObject to get root failed!"); 
  17.  
  18.         return -1; 
  19.     } 
  20.  
  21.     cJSON_AddStringToObject(root, "name", "zhou"); 
  22.  
  23.     cJSON_AddNumberToObject(root, "age", 30); 
  24.  
  25.     out=cJSON_Print(root); 
  26.     strncpy(pszJsonContent, out, iJsonLen - 1); 
  27.     pszJsonContent[iJsonLen - 1] = '\0'; 
  28.  
  29.     cJSON_Delete(root); 
  30.     free(out); 
  31.  
  32.     return 0; 

2. 如果要實現如下JSON消息:

  1.     personinfo:{ 
  2.         name:"zhou", 
  3.         age:30 
  4.     } 

則編寫C代碼函數如下:

  1. int MakeJsonPersonInfo(char *pszJsonContent, int iJsonLen) 
  2.     cJSON *root        = NULL
  3.     cJSON *JsonLevel1  = NULL
  4.     char  *out         = NULL
  5.  
  6.     // 判斷函數參數是否合法 
  7.     if (pszJsonContent == NULL) 
  8.     { 
  9.         printf("MakeJsonPersonInfo: pszJsonContent is NULL!"); 
  10.  
  11.         return -1; 
  12.     } 
  13.  
  14.     root = cJSON_CreateObject(); 
  15.     if(NULL == root) 
  16.     { 
  17.         printf("MakeJsonPersonInfo: exec cJSON_CreateObject to get root failed!"); 
  18.  
  19.         return -1; 
  20.     } 
  21.  
  22.     JsonLevel1 = cJSON_CreateObject(); 
  23.     if(NULL == JsonLevel1) 
  24.     { 
  25.         printf("MakeJsonPersonInfo: exec cJSON_CreateObject to get JsonLevel1 failed!"); 
  26.  
  27.         cJSON_Delete(root); 
  28.         return -1; 
  29.     }    
  30.  
  31.     cJSON_AddStringToObject(JsonLevel1, "name", "zhou"); 
  32.  
  33.     cJSON_AddNumberToObject(JsonLevel1, "age", 30); 
  34.  
  35.     cJSON_AddItemToObject(root, "personinfo", JsonLevel1); 
  36.  
  37.     out=cJSON_Print(root); 
  38.     strncpy(pszJsonContent, out, iJsonLen - 1); 
  39.     pszJsonContent[iJsonLen - 1] = '\0'; 
  40.  
  41.     cJSON_Delete(root); 
  42.     free(out); 
  43.  
  44.     return 0; 

3. 如果要實現如下JSON消息:

  1.     personinfo1:{ 
  2.         name:"zhou", 
  3.         age:30 
  4.     }, 
  5.     personinfo2:{ 
  6.         name:"zhang", 
  7.         age:41 
  8.     } 

 則編寫C代碼函數如下:

  1. int MakeJsonTwoPersonInfo(char *pszJsonContent, int iJsonLen) 
  2.     cJSON *root        = NULL
  3.     cJSON *JsonLevel1  = NULL
  4.     char  *out         = NULL
  5.  
  6.     // 判斷函數參數是否合法 
  7.     if (pszJsonContent == NULL) 
  8.     { 
  9.         printf("MakeJsonTwoPersonInfo: pszJsonContent is NULL!"); 
  10.  
  11.         return -1; 
  12.     } 
  13.  
  14.     root = cJSON_CreateObject(); 
  15.     if(NULL == root) 
  16.     { 
  17.         printf("MakeJsonTwoPersonInfo: exec cJSON_CreateObject to get root failed!"); 
  18.  
  19.         return -1; 
  20.     } 
  21.  
  22.     //--------------- 
  23.     JsonLevel1 = cJSON_CreateObject(); 
  24.     if(NULL == JsonLevel1) 
  25.     { 
  26.         printf("MakeJsonTwoPersonInfo: exec cJSON_CreateObject to get JsonLevel1 failed 1!"); 
  27.  
  28.         cJSON_Delete(root); 
  29.         return -1; 
  30.     }    
  31.  
  32.     cJSON_AddStringToObject(JsonLevel1, "name", "zhou"); 
  33.  
  34.     cJSON_AddNumberToObject(JsonLevel1, "age", 30); 
  35.  
  36.     cJSON_AddItemToObject(root, "personinfo1", JsonLevel1); 
  37.  
  38.     //--------------- 
  39.     JsonLevel1 = cJSON_CreateObject(); 
  40.     if(NULL == JsonLevel1) 
  41.     { 
  42.         printf("MakeJsonTwoPersonInfo: exec cJSON_CreateObject to get JsonLevel1 failed 2!"); 
  43.  
  44.         cJSON_Delete(root); 
  45.         return -1; 
  46.     }    
  47.  
  48.     cJSON_AddStringToObject(JsonLevel1, "name", "zhang"); 
  49.  
  50.     cJSON_AddNumberToObject(JsonLevel1, "age", 40); 
  51.  
  52.     cJSON_AddItemToObject(root, "personinfo2", JsonLevel1); 
  53.  
  54.     out=cJSON_Print(root); 
  55.     strncpy(pszJsonContent, out, iJsonLen - 1); 
  56.     pszJsonContent[iJsonLen - 1] = '\0'; 
  57.  
  58.     cJSON_Delete(root); 
  59.     free(out); 
  60.  
  61.     return 0; 

4. 如果要實現如下JSON消息:

  1.     id:"123456", 
  2.     personinfo:{ 
  3.         name:"zhou", 
  4.         age:30 
  5.     } 

則編寫C代碼函數如下:

  1. int MakeJsonIDPersonInfo(char *pszJsonContent, int iJsonLen) 
  2.     cJSON *root        = NULL
  3.     cJSON *JsonLevel1  = NULL
  4.     char  *out         = NULL
  5.  
  6.     // 判斷函數參數是否合法 
  7.     if (pszJsonContent == NULL) 
  8.     { 
  9.         printf("MakeJsonIDPersonInfo: pszJsonContent is NULL!"); 
  10.  
  11.         return -1; 
  12.     } 
  13.  
  14.     root = cJSON_CreateObject(); 
  15.     if(NULL == root) 
  16.     { 
  17.         printf("MakeJsonIDPersonInfo: exec cJSON_CreateObject to get root failed!"); 
  18.  
  19.         return -1; 
  20.     } 
  21.  
  22.     cJSON_AddStringToObject(root, "id", "123456"); 
  23.  
  24.     JsonLevel1 = cJSON_CreateObject(); 
  25.     if(NULL == JsonLevel1) 
  26.     { 
  27.         printf("MakeJsonIDPersonInfo: exec cJSON_CreateObject to get JsonLevel1 failed!"); 
  28.  
  29.         cJSON_Delete(root); 
  30.         return -1; 
  31.     }    
  32.  
  33.     cJSON_AddStringToObject(JsonLevel1, "name", "zhou"); 
  34.  
  35.     cJSON_AddNumberToObject(JsonLevel1, "age", 30); 
  36.  
  37.     cJSON_AddItemToObject(root, "personinfo", JsonLevel1); 
  38.  
  39.     out=cJSON_Print(root); 
  40.     strncpy(pszJsonContent, out, iJsonLen - 1); 
  41.     pszJsonContent[iJsonLen - 1] = '\0'; 
  42.  
  43.     cJSON_Delete(root); 
  44.     free(out); 
  45.  
  46.     return 0; 

5. 如果要實現如下JSON消息:

  1.     personname:[ 
  2.         "zhou", 
  3.         "zhang" 
  4.     ] 

則編寫C代碼函數如下:

  1. int MakeJsonPersonNameInfo(char *pszJsonContent, int iJsonLen) 
  2.     cJSON *root        = NULL
  3.     cJSON *JsonLevel1  = NULL
  4.     cJSON *JsonLevel2  = NULL
  5.     char  *out         = NULL
  6.  
  7.     // 判斷函數參數是否合法 
  8.     if (pszJsonContent == NULL) 
  9.     { 
  10.         printf("MakeJsonPersonNameInfo: pszJsonContent is NULL!"); 
  11.  
  12.         return -1; 
  13.     } 
  14.  
  15.     root = cJSON_CreateObject(); 
  16.     if (NULL == root) 
  17.     { 
  18.         printf("MakeJsonPersonNameInfo: exec cJSON_CreateObject to get root failed!"); 
  19.  
  20.         return -1; 
  21.     } 
  22.  
  23.     JsonLevel1 = cJSON_CreateArray(); 
  24.     if (NULL == JsonLevel1) 
  25.     { 
  26.         printf("MakeJsonPersonNameInfo: exec cJSON_CreateArray to get JsonLevel1 failed!"); 
  27.  
  28.         cJSON_Delete(root); 
  29.         return -1; 
  30.     } 
  31.  
  32.     cJSON_AddItemToObject(root, "personname", JsonLevel1); 
  33.  
  34.     JsonLevel2 = cJSON_CreateString("zhou"); 
  35.     cJSON_AddItemToArray(JsonLevel1, JsonLevel2); 
  36.  
  37.     JsonLevel2 = cJSON_CreateString("zhang"); 
  38.     cJSON_AddItemToArray(JsonLevel1, JsonLevel2); 
  39.  
  40.     out=cJSON_Print(root); 
  41.     strncpy(pszJsonContent, out, iJsonLen - 1); 
  42.     pszJsonContent[iJsonLen - 1] = '\0'; 
  43.  
  44.     cJSON_Delete(root); 
  45.     free(out); 
  46.  
  47.     return 0; 

6. 如果要實現如下JSON消息:

  1.     id:"123456", 
  2.     personname:[ 
  3.         "zhou", 
  4.         "zhang" 
  5.     ], 
  6.     personinfo:{ 
  7.         phonenumber:"15696192591", 
  8.         age:30 
  9.     } 

 則編寫C代碼函數如下:

  1. int MakeJsonIDPersonNameInfo(char *pszJsonContent, int iJsonLen) 
  2.     cJSON *root        = NULL
  3.     cJSON *JsonLevel1  = NULL
  4.     cJSON *JsonLevel2  = NULL
  5.     char  *out         = NULL
  6.  
  7.     // 判斷函數參數是否合法 
  8.     if (pszJsonContent == NULL) 
  9.     { 
  10.         printf("MakeJsonIDPersonNameInfo: pszJsonContent is NULL!"); 
  11.  
  12.         return -1; 
  13.     } 
  14.  
  15.     root = cJSON_CreateObject(); 
  16.     if (NULL == root) 
  17.     { 
  18.         printf("MakeJsonIDPersonNameInfo: exec cJSON_CreateObject to get root failed!"); 
  19.  
  20.         return -1; 
  21.     } 
  22.  
  23.     cJSON_AddStringToObject(root, "id", "123456"); 
  24.  
  25.     JsonLevel1 = cJSON_CreateArray(); 
  26.     if (NULL == JsonLevel1) 
  27.     { 
  28.         printf("MakeJsonIDPersonNameInfo: exec cJSON_CreateArray to get JsonLevel1 failed 1!"); 
  29.  
  30.         cJSON_Delete(root); 
  31.         return -1; 
  32.     } 
  33.  
  34.     cJSON_AddItemToObject(root, "personname", JsonLevel1); 
  35.  
  36.     JsonLevel2 = cJSON_CreateString("zhou"); 
  37.     cJSON_AddItemToArray(JsonLevel1, JsonLevel2); 
  38.  
  39.     JsonLevel2 = cJSON_CreateString("zhang"); 
  40.     cJSON_AddItemToArray(JsonLevel1, JsonLevel2); 
  41.  
  42.     //----------------- 
  43.     JsonLevel1 = cJSON_CreateObject(); 
  44.     if(NULL == JsonLevel1) 
  45.     { 
  46.         printf("MakeJsonIDPersonNameInfo: exec cJSON_CreateObject to get JsonLevel1 failed 2!"); 
  47.  
  48.         cJSON_Delete(root); 
  49.         return -1; 
  50.     }    
  51.  
  52.     cJSON_AddStringToObject(JsonLevel1, "name", "zhou"); 
  53.  
  54.     cJSON_AddNumberToObject(JsonLevel1, "age", 30); 
  55.  
  56.     cJSON_AddItemToObject(root, "personinfo", JsonLevel1); 
  57.  
  58.     out=cJSON_Print(root); 
  59.     strncpy(pszJsonContent, out, iJsonLen - 1); 
  60.     pszJsonContent[iJsonLen - 1] = '\0'; 
  61.  
  62.     cJSON_Delete(root); 
  63.     free(out); 
  64.  
  65.     return 0; 

7. 如果要實現如下JSON消息:

  1.     personinfo:{ 
  2.         personname:[ 
  3.         "zhou", 
  4.         "zhang" 
  5.         ], 
  6.         age:30 
  7.     } 

則編寫C代碼函數如下:

  1. int MakeJsonAgePersonNameInfo(char *pszJsonContent, int iJsonLen) 
  2.     cJSON *root        = NULL
  3.     cJSON *JsonLevel1  = NULL
  4.     cJSON *JsonLevel2  = NULL
  5.     cJSON *JsonLevel3  = NULL
  6.     char  *out         = NULL
  7.  
  8.     // 判斷函數參數是否合法 
  9.     if (pszJsonContent == NULL) 
  10.     { 
  11.         printf("MakeJsonAgePersonNameInfo: pszJsonContent is NULL!"); 
  12.  
  13.         return -1; 
  14.     } 
  15.  
  16.     root = cJSON_CreateObject(); 
  17.     if (NULL == root) 
  18.     { 
  19.         printf("MakeJsonAgePersonNameInfo: exec cJSON_CreateObject to get root failed!"); 
  20.  
  21.         return -1; 
  22.     } 
  23.  
  24.     JsonLevel1 = cJSON_CreateObject(); 
  25.     if(NULL == JsonLevel1) 
  26.     { 
  27.         printf("MakeJsonAgePersonNameInfo: exec cJSON_CreateObject to get JsonLevel1 failed!"); 
  28.  
  29.         cJSON_Delete(root); 
  30.         return -1; 
  31.     }    
  32.  
  33.     cJSON_AddItemToObject(root, "personinfo", JsonLevel1); 
  34.  
  35.     //------------------ 
  36.     JsonLevel2 = cJSON_CreateArray(); 
  37.     if (NULL == JsonLevel2) 
  38.     { 
  39.         printf("MakeJsonAgePersonNameInfo: exec cJSON_CreateArray to get JsonLevel2 failed!"); 
  40.  
  41.         cJSON_Delete(root); 
  42.         return -1; 
  43.     } 
  44.  
  45.     cJSON_AddItemToObject(JsonLevel1, "personname", JsonLevel2); 
  46.  
  47.     JsonLevel3 = cJSON_CreateString("zhou"); 
  48.     cJSON_AddItemToArray(JsonLevel2, JsonLevel3); 
  49.  
  50.     JsonLevel3 = cJSON_CreateString("zhang"); 
  51.     cJSON_AddItemToArray(JsonLevel2, JsonLevel3); 
  52.  
  53.     //------------------ 
  54.     cJSON_AddNumberToObject(JsonLevel1, "age", 30); 
  55.  
  56.  
  57.     out=cJSON_Print(root); 
  58.     strncpy(pszJsonContent, out, iJsonLen - 1); 
  59.     pszJsonContent[iJsonLen - 1] = '\0'; 
  60.  
  61.     cJSON_Delete(root); 
  62.     free(out); 
  63.  
  64.     return 0; 

8. 如果要實現如下JSON消息:

  1.     personinfo:[ 
  2.     { 
  3.         name:"zhou", 
  4.         age:30 
  5.     }, 
  6.     { 
  7.         name:"zhang", 
  8.         age:41 
  9.     } 
  10.     ] 

則編寫C代碼函數如下:

  1. int MakeJsonPersonsInfo(char *pszJsonContent, int iJsonLen) 
  2.     cJSON *root        = NULL
  3.     cJSON *JsonLevel1  = NULL
  4.     cJSON *JsonLevel2  = NULL
  5.     char  *out         = NULL
  6.  
  7.     // 判斷函數參數是否合法 
  8.     if (pszJsonContent == NULL) 
  9.     { 
  10.         printf("MakeJsonPersonsInfo: pszJsonContent is NULL!"); 
  11.  
  12.         return -1; 
  13.     } 
  14.  
  15.     root = cJSON_CreateObject(); 
  16.     if (NULL == root) 
  17.     { 
  18.         printf("MakeJsonPersonsInfo: exec cJSON_CreateObject to get root failed!"); 
  19.  
  20.         return -1; 
  21.     } 
  22.  
  23.     JsonLevel1 = cJSON_CreateArray(); 
  24.     if (NULL == JsonLevel1) 
  25.     { 
  26.         printf("MakeJsonPersonsInfo: exec cJSON_CreateArray to get JsonLevel1 failed!"); 
  27.  
  28.         cJSON_Delete(root); 
  29.         return -1; 
  30.     } 
  31.  
  32.     cJSON_AddItemToObject(root, "personinfo", JsonLevel1); 
  33.  
  34.     //--------------- 
  35.     JsonLevel2 = cJSON_CreateObject(); 
  36.     if(NULL == JsonLevel2) 
  37.     { 
  38.         printf("MakeJsonPersonsInfo: exec cJSON_CreateObject to get JsonLevel2 failed 1!"); 
  39.  
  40.         cJSON_Delete(root); 
  41.         return -1; 
  42.     }    
  43.  
  44.     cJSON_AddItemToArray(JsonLevel1, JsonLevel2); 
  45.  
  46.     cJSON_AddStringToObject(JsonLevel2, "name", "zhou"); 
  47.  
  48.     cJSON_AddNumberToObject(JsonLevel2, "age", 30); 
  49.  
  50.     //--------------- 
  51.     JsonLevel2 = cJSON_CreateObject(); 
  52.     if(NULL == JsonLevel2) 
  53.     { 
  54.         printf("MakeJsonPersonsInfo: exec cJSON_CreateObject to get JsonLevel2 failed 2!"); 
  55.  
  56.         cJSON_Delete(root); 
  57.         return -1; 
  58.     }    
  59.  
  60.     cJSON_AddItemToArray(JsonLevel1, JsonLevel2); 
  61.  
  62.     cJSON_AddStringToObject(JsonLevel2, "name", "zhang"); 
  63.  
  64.     cJSON_AddNumberToObject(JsonLevel2, "age", 41);      
  65.  
  66.     //--------------- 
  67.     out=cJSON_Print(root); 
  68.     strncpy(pszJsonContent, out, iJsonLen - 1); 
  69.     pszJsonContent[iJsonLen - 1] = '\0'; 
  70.  
  71.     cJSON_Delete(root); 
  72.     free(out); 
  73.  
  74.     return 0; 

總結 

以上是常見JSON消息的C代碼實現方法,大家可以編寫測試代碼來看最終生成的JSON消息是否是我們描述的那樣。我編寫了一個完整的測試代碼,放到了GitHub上,歡迎下載閱讀:https://github.com/zhouzxi/TestJson。(本測試程序是運行在Linux上的,大家可以使用這個命令進行編譯:

  1. gcc -g -o TestJson TestJson.c cJSON.c -pthread -lc -lm) 

【本文是51CTO專欄作者周兆熊的原創文章,作者微信公眾號:周氏邏輯(logiczhou)】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2020-07-20 07:56:28

JavaScript開發技術

2011-07-01 15:28:26

PhoneGap代碼示例

2019-07-16 08:38:34

JavaJson庫數據

2015-07-02 10:37:32

C#Json字符串類代碼

2010-01-06 17:06:05

Json格式

2016-12-20 11:12:11

C代碼自測開發

2009-08-27 15:53:30

C#中using wo

2023-11-12 11:56:28

Json格式弊端

2024-06-24 03:00:00

2024-06-18 08:37:25

場景異步編程代碼

2016-12-12 12:37:45

結構C代碼賦值

2010-02-05 10:23:09

C++基本函數

2009-08-17 17:36:08

C# 枚舉

2014-07-10 10:09:11

JSON數據行轉列

2009-09-01 16:49:56

C#文件上傳下載

2009-07-03 17:44:06

JSP介紹

2009-09-16 16:32:20

JavaScript靜

2010-02-03 10:05:48

C++ enum枚舉

2009-08-24 08:56:55

C#反射

2023-09-13 14:42:08

typedefC++
點贊
收藏

51CTO技術棧公眾號

国产精品入口麻豆原神| 国产一区二区精品丝袜| 久久www免费人成精品| 成人免费短视频| 老色鬼久久亚洲一区二区| 97精品国产aⅴ7777| 中文在线字幕免费观看| 亚洲欧美二区三区| 日本一区二区免费高清视频| 国产成人精品999在线观看| 欧美mv和日韩mv国产网站| 四虎av网址| 国产成人精品免费| 国产精品yjizz| 亚洲裸色大胆大尺寸艺术写真| 亚洲国产成人在线视频| 美女网站在线观看| 国产日韩视频一区二区三区| 亚洲电影网站| 欧美视频网站| 91精品视频免费观看| 美日韩黄色大片| 日韩专区中文字幕| 操人在线观看| 欧美久久久久久蜜桃| 一级片在线观看| 亚洲人吸女人奶水| 久久久久久久激情| 波多野洁衣一区| 草草草视频在线观看| 视频一区视频二区在线观看| 国产传媒一区二区三区| 91亚洲人成网污www| 国产成人精品一区二区三区| 国产在线播放精品| 欧美精品性视频| 日本一区二区中文字幕| 中文字幕久精品免费视频| 澳门成人av网| 国产一区二区动漫| 久久69成人| 久久精品国产电影| 亚洲精品tv| 久久久久999| 亚洲毛片在线免费| 久久最新资源网| 日韩成人视屏| 97香蕉超级碰碰久久免费的优势| 18国产精品| 欧美黑人xxx| 日韩精品福利一区二区三区| 97在线观看视频国产| 精品三级av在线导航| 欧美在线影院在线视频| 波多野结衣一区| 91手机在线视频| 久久久久久久波多野高潮日日| 欧美在线播放一区| 国产精品538一区二区在线| 青青草视频在线免费播放| 久久天天做天天爱综合色| 99热最新网址| 日韩欧美国产网站| 操你啦在线视频| 日韩精品有码在线观看| 亚瑟国产精品| 国产精品久在线观看| 亚洲国产日本| 9999在线观看| 久久久精品综合| www污污在线| 在线不卡中文字幕| 456亚洲精品成人影院| 欧美激情精品久久久久久久变态 | 亚洲精品自拍第一页| xx欧美xxx| 欧美极品少妇xxxxⅹ免费视频 | 欧美激情a在线| 深爱激情久久| 国产精品一区二区a| 麻豆成人久久精品二区三区小说| 精品国产一区二区三区无码| 国产精品三级视频| www.亚洲资源| 日韩在线不卡视频| 91精品推荐| 免费成人进口网站| 日韩理论片中文av| bestiality新另类大全| 按摩亚洲人久久| 仙踪林久久久久久久999| 欧美成人在线免费观看| 99国产精品久久久久久久久久 | 欧美a级大片在线| 国产精品视频26uuu| 青椒成人免费视频| 99不卡视频| 日韩欧美在线一区二区三区| 日韩激情综合| 久久亚洲高清| 久久久不卡网国产精品二区| 夜色资源站国产www在线视频| 亚洲国产97在线精品一区| 日本成人a网站| 亚洲高清视频一区| 亚洲一区二区三区视频在线| аⅴ资源天堂资源库在线| 国产精品av电影| 国产91丝袜在线18| 国产一二三区在线视频| 欧美成人高清视频| 美女被久久久| 黄色av免费| 亚洲天天在线日亚洲洲精| 我不卡影院28| 日韩中文字幕组| 亚洲第一视频网站| 一级毛片免费高清中文字幕久久网| xxxx18hd亚洲hd捆绑| 国产精品剧情| 黄网站色欧美视频| 欧美99在线视频观看| 日本免费黄视频| 亚洲免费成人av电影| 日本系列欧美系列| av有码在线观看| 国产日韩av在线播放| 粉嫩aⅴ一区二区三区四区五区| 国产色视频网站| 日韩—二三区免费观看av| 97福利电影| www.日韩欧美| 视频在线观看一区| 四虎永久在线| 欧美国产日韩xxxxx| 久久精品国产一区二区| 国产视频网站在线| 国产激情久久久久| 国产精品国产成人国产三级| 日韩欧美看国产| 亚洲毛片aa| 欧美成人aa大片| 99精品视频免费观看| 久艹在线视频| 欧美亚洲午夜视频在线观看| 成人精品免费看| 中文字幕在线高清| 亚洲mv在线看| 日韩视频免费直播| 精品999日本| 国产美女性感在线观看懂色av| 国产成人一区二区三区电影| 国产欧美日韩激情| 亚洲国产精品免费视频| 久久国产精品视频在线观看| 亚洲精品乱码久久久久久按摩观| 夜夜嗨一区二区三区| 97热精品视频官网| 麻豆网站在线免费观看| 国产精品视频在线播放| 亚洲一区欧美一区| 欧美另类69xxxxx| 97影院手机在线观看| 国产精品成人免费视频| 亚洲精品免费一二三区| 国产精品一区高清| 四虎永久在线| 99九九电视剧免费观看| 欧美中文字幕一区二区三区 | 久久久久久欧美| 欧美激情资源网| 欧美一区自拍| 日本我和搜子同居的日子高清在线| 欧美专区在线播放| 亚洲国产日韩a在线播放性色| 四虎国产精品免费观看| 青青草视频在线免费观看| 精品日本一区二区| 亚洲电影在线观看| av一区二区三区黑人| 欧州一区二区三区| 国产在线制服美女| 国产高清一区二区三区| 欧美一区三区四区| 国产精品一二三四| 911精品国产| 性色视频在线| 日日噜噜噜噜夜夜爽亚洲精品| 日韩精品免费在线| 2020日本不卡一区二区视频| 亚洲97av| √天堂资源地址在线官网| 青青成人在线| 日韩中文娱乐网| 亚洲国产综合91精品麻豆| 国产欧美高清| 国产精品白丝久久av网站| 91天堂在线| 视频一区免费观看| 国模极品一区二区三区|