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

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

P粉526161432
P粉526161432原创
2022年03月27日 11:11:38665浏览
  1. 这篇文章主要介绍了PHP实现chrome表单请求数据转换为接口使用的json数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  1. 为什么要写转换程序
  2. 最近在做旧版程序迁移,旧的架构为常规的MVC模式,新版架构全部改成restful架构。
  3. 由于改版数据是一致的,但是请求结构不一致,新版的请求全部以json形式提交,为了方便测试,之前一直都是直接在浏览器打开开发者工具,然后把请求内容复制过来,然后手动改成json形式,由于之前数据量比较少,暂时未发现测试时候不方便的情况,但是今天遇到了数据比较多的情况,于是我想,为啥不写一段转换程序呢?
  4. 本身来说,程序的初衷应该是提高工作效率,这也是我之前缺少反思的地方,因此写下这篇文章做个记录。
  5. 代码
  6. 废话不多说,直接上代码,有啥不足的地方,后续有时间再做研究。
  1. <?php
  2. // 文件路经
  3. $f = './t.data';
  4. $content = file_get_contents($f);
  5. $rows = explode("\n", $content);
  6. $data = [];
  7. foreach ($rows as $row) {
  8. // 分割keyvalue
  9. $rowInfo = explode(':', $row);
  10. $keyInfo = array_shift($rowInfo);
  11. $value = trim(implode(':', $rowInfo));
  12. $keyArray = getCharArray($keyInfo);
  13. $keyItem = '';
  14. $keys = [];
  15. foreach ($keyArray as $char) {
  16. if ($char == '[') {
  17. $keys[] = $keyItem;
  18. $keyItem = '';
  19. } elseif ($char == ']') {
  20. continue;
  21. } else {
  22. $keyItem .= $char;
  23. }
  24. }
  25. $keys[] = $keyItem;
  26. // 驼峰转下划线
  27. $keys = array_map(function ($item) {
  28. return strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $item));
  29. }, $keys);
  30. $firstKey = array_shift($keys);
  31. if (empty($keys)) {
  32. $data[$firstKey] = $value;
  33. } else {
  34. if (!isset($data[$firstKey])) {
  35. $data[$firstKey] = [];
  36. }
  37. $item = &$data[$firstKey];
  38. while (!empty($keys)) {
  39. $currentKey = array_shift($keys);
  40. if (!isset($item[$currentKey])) {
  41. $item[$currentKey] = [];
  42. }
  43. $item = &$item[$currentKey];
  44. }
  45. $item = $value;
  46. unset($item);
  47. }
  48. }
  49. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  50. /**
  51. * 字符串转字符数组
  52. *
  53. * @param string $string
  54. *
  55. * @return array
  56. */
  57. function getCharArray(string $string)
  58. {
  59. $strlen = mb_strlen($string);
  60. $i = 0;
  61. $charArray = [];
  62. while ($i < $strlen) {
  63. $charArray[] = mb_substr($string, $i, 1);
  64. $i++;
  65. }
  66. return $charArray;
  67. }
  1. 示例文件
  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
  1. 输出json
  1. {
  2. "thumbnail": " https:\/\/avatar-static.segmentfault.com\/393\/562\/3935623170-1140000000142909",
  3. "name": " 101 新手上路",
  4. "description": " 面向新手开发者的问题集中营",
  5. "sidebar": " 欢迎来到 SegmentFault 101 新手上路问答。如果你是开发新手,有各种各样的疑惑,但又害怕提出来被嘲笑,欢迎在此提问。本区禁止嘲讽,请大家认真解答问题。",
  6. "admins": [
  7. {
  8. "user_id": " 1030000000094051",
  9. "is_notice_site": " 0",
  10. "is_notice_mail": " 0"
  11. },
  12. {
  13. "user_id": " 1030000000091305",
  14. "is_notice_site": " 0",
  15. "is_notice_mail": " 0"
  16. },
  17. {
  18. "user_id": " 1030000000146026",
  19. "is_notice_site": " 0",
  20. "is_notice_mail": " 0"
  21. },
  22. {
  23. "user_id": " 1030000000141721",
  24. "is_notice_site": " 0",
  25. "is_notice_mail": " 0"
  26. },
  27. {
  28. "user_id": " 1030000000142354",
  29. "is_notice_site": " 0",
  30. "is_notice_mail": " 0"
  31. },
  32. {
  33. "user_id": " 1030000000144141",
  34. "is_notice_site": " 0",
  35. "is_notice_mail": " 0"
  36. },
  37. {
  38. "user_id": " 1030000000091353",
  39. "is_notice_site": " 0",
  40. "is_notice_mail": " 0"
  41. }
  42. ]
  43. }
  1. 到此这篇关于PHP实现chrome表单请求数据转换为接口使用的json数据的文章就介绍到这了,更多相关PHP json请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议