当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP实现chrome表单请求数据转换为接口使用的json数据

发布:smiling 来源: PHP粉丝网  添加日期:2022-04-16 13:14:50 浏览: 评论:0 

这篇文章主要介绍了PHP实现chrome表单请求数据转换为接口使用的json数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

为什么要写转换程序

最近在做旧版程序迁移,旧的架构为常规的MVC模式,新版架构全部改成restful架构。

由于改版数据是一致的,但是请求结构不一致,新版的请求全部以json形式提交,为了方便测试,之前一直都是直接在浏览器打开开发者工具,然后把请求内容复制过来,然后手动改成json形式,由于之前数据量比较少,暂时未发现测试时候不方便的情况,但是今天遇到了数据比较多的情况,于是我想,为啥不写一段转换程序呢?

本身来说,程序的初衷应该是提高工作效率,这也是我之前缺少反思的地方,因此写下这篇文章做个记录。

代码

废话不多说,直接上代码,有啥不足的地方,后续有时间再做研究。

  1. <?php 
  2. // 文件路经 
  3. $f = './t.data'
  4.  
  5. $content = file_get_contents($f); 
  6.  
  7. $rows = explode("\n"$content); 
  8.  
  9. $data = []; 
  10. foreach ($rows as $row) { 
  11.   // 分割key和value 
  12.   $rowInfo = explode(':'$row); 
  13.   $keyInfo = array_shift($rowInfo); 
  14.   $value  = trim(implode(':'$rowInfo)); 
  15.  
  16.   $keyArray = getCharArray($keyInfo); 
  17.   $keyItem = ''
  18.   $keys   = []; 
  19.   foreach ($keyArray as $char) { 
  20.     if ($char == '[') { 
  21.       $keys[] = $keyItem
  22.       $keyItem = ''
  23.     } elseif ($char == ']') { 
  24.       continue
  25.     } else { 
  26.       $keyItem .= $char
  27.     } 
  28.   } 
  29.   $keys[] = $keyItem
  30.  
  31.   // 驼峰转下划线 
  32.   $keys = array_map(function ($item) { 
  33.     return strtolower(preg_replace('/(?<=[a-z])([A-Z])/''_$1'$item)); 
  34.   }, $keys); 
  35.  
  36.   $firstKey = array_shift($keys); 
  37.   if (emptyempty($keys)) { 
  38.     $data[$firstKey] = $value
  39.   } else { 
  40.     if (!isset($data[$firstKey])) { 
  41.       $data[$firstKey] = []; 
  42.     } 
  43.     $item = &$data[$firstKey]; 
  44.     while (!emptyempty($keys)) { 
  45.       $currentKey = array_shift($keys); 
  46.       if (!isset($item[$currentKey])) { 
  47.         $item[$currentKey] = []; 
  48.       } 
  49.       $item = &$item[$currentKey]; 
  50.     } 
  51.     $item = $value
  52.     unset($item); 
  53.   } 
  54. echo json_encode($data, JSON_UNESCAPED_UNICODE); 
  55.  
  56. /** 
  57.  * 字符串转字符数组 
  58.  * 
  59.  * @param string $string 
  60.  * 
  61.  * @return array 
  62.  */ 
  63. function getCharArray(string $string
  64.   $strlen  = mb_strlen($string); 
  65.   $i     = 0; 
  66.   $charArray = []; 
  67.   while ($i < $strlen) { 
  68.     $charArray[] = mb_substr($string$i, 1); 
  69.     $i++; 
  70.   } 
  71.   return $charArray

示例文件:

  1. thumbnail: https://avatar-static.segmentfault.com/393/562/3935623170-1140000000142909 
  2. name: 101 新手上路 
  3. description: 面向新手开发者的问题集中营 
  4. sidebar: 欢迎来到 SegmentFault 101 新手上路问答。如果你是开发新手,有各种各样的疑惑,但又害怕提出来被嘲笑,欢迎在此提问。本区禁止嘲讽,请大家认真解答问题。 
  5. admins[0][user_id]: 1030000000094051 
  6. admins[0][isNoticeSite]: 0 
  7. admins[0][isNoticeMail]: 0 
  8. admins[1][user_id]: 1030000000091305 
  9. admins[1][isNoticeSite]: 0 
  10. admins[1][isNoticeMail]: 0 
  11. admins[2][user_id]: 1030000000146026 
  12. admins[2][isNoticeSite]: 0 
  13. admins[2][isNoticeMail]: 0 
  14. admins[3][user_id]: 1030000000141721 
  15. admins[3][isNoticeSite]: 0 
  16. admins[3][isNoticeMail]: 0 
  17. admins[4][user_id]: 1030000000142354 
  18. admins[4][isNoticeSite]: 0 
  19. admins[4][isNoticeMail]: 0 
  20. admins[5][user_id]: 1030000000144141 
  21. admins[5][isNoticeSite]: 0 
  22. admins[5][isNoticeMail]: 0 
  23. admins[6][user_id]: 1030000000091353 
  24. admins[6][isNoticeSite]: 0 
  25. admins[6][isNoticeMail]: 0 

输出json

  1.   "thumbnail": " https:\/\/avatar-static.segmentfault.com\/393\/562\/3935623170-1140000000142909", 
  2.   "name": " 101 新手上路", 
  3.   "description": " 面向新手开发者的问题集中营", 
  4.   "sidebar": " 欢迎来到 SegmentFault 101 新手上路问答。如果你是开发新手,有各种各样的疑惑,但又害怕提出来被嘲笑,欢迎在此提问。本区禁止嘲讽,请大家认真解答问题。", 
  5.   "admins": [ 
  6.     { 
  7.       "user_id": " 1030000000094051", 
  8.       "is_notice_site": " 0", 
  9.       "is_notice_mail": " 0" 
  10.     }, 
  11.     { 
  12.       "user_id": " 1030000000091305", 
  13.       "is_notice_site": " 0", 
  14.       "is_notice_mail": " 0" 
  15.     }, 
  16.     { 
  17.       "user_id": " 1030000000146026", 
  18.       "is_notice_site": " 0", 
  19.       "is_notice_mail": " 0" 
  20.     }, 
  21.     { 
  22.       "user_id": " 1030000000141721", 
  23.       "is_notice_site": " 0", 
  24.       "is_notice_mail": " 0" 
  25.     }, 
  26.     { 
  27.       "user_id": " 1030000000142354", 
  28.       "is_notice_site": " 0", 
  29.       "is_notice_mail": " 0" 
  30.     }, 
  31.     { 
  32.       "user_id": " 1030000000144141", 
  33.       "is_notice_site": " 0", 
  34.       "is_notice_mail": " 0" 
  35.     }, 
  36.     { 
  37.       "user_id": " 1030000000091353", 
  38.       "is_notice_site": " 0", 
  39.       "is_notice_mail": " 0" 
  40.     } 
  41.   ] 
  42. }

Tags: chrome表单请求 json

分享到: