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


Posted in PHP onMarch 04, 2021

为什么要写转换程序

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

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

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

代码

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

<?php
// 文件路经
$f = './t.data';

$content = file_get_contents($f);

$rows = explode("\n", $content);

$data = [];
foreach ($rows as $row) {
  // 分割key和value
  $rowInfo = explode(':', $row);
  $keyInfo = array_shift($rowInfo);
  $value  = trim(implode(':', $rowInfo));

  $keyArray = getCharArray($keyInfo);
  $keyItem = '';
  $keys   = [];
  foreach ($keyArray as $char) {
    if ($char == '[') {
      $keys[] = $keyItem;
      $keyItem = '';
    } elseif ($char == ']') {
      continue;
    } else {
      $keyItem .= $char;
    }
  }
  $keys[] = $keyItem;

  // 驼峰转下划线
  $keys = array_map(function ($item) {
    return strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $item));
  }, $keys);

  $firstKey = array_shift($keys);
  if (empty($keys)) {
    $data[$firstKey] = $value;
  } else {
    if (!isset($data[$firstKey])) {
      $data[$firstKey] = [];
    }
    $item = &$data[$firstKey];
    while (!empty($keys)) {
      $currentKey = array_shift($keys);
      if (!isset($item[$currentKey])) {
        $item[$currentKey] = [];
      }
      $item = &$item[$currentKey];
    }
    $item = $value;
    unset($item);
  }
}
echo json_encode($data, JSON_UNESCAPED_UNICODE);

/**
 * 字符串转字符数组
 *
 * @param string $string
 *
 * @return array
 */
function getCharArray(string $string)
{
  $strlen  = mb_strlen($string);
  $i     = 0;
  $charArray = [];
  while ($i < $strlen) {
    $charArray[] = mb_substr($string, $i, 1);
    $i++;
  }
  return $charArray;
}

示例文件:

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

输出json

{
  "thumbnail": " https:\/\/avatar-static.segmentfault.com\/393\/562\/3935623170-1140000000142909",
  "name": " 101 新手上路",
  "description": " 面向新手开发者的问题集中营",
  "sidebar": " 欢迎来到 SegmentFault 101 新手上路问答。如果你是开发新手,有各种各样的疑惑,但又害怕提出来被嘲笑,欢迎在此提问。本区禁止嘲讽,请大家认真解答问题。",
  "admins": [
    {
      "user_id": " 1030000000094051",
      "is_notice_site": " 0",
      "is_notice_mail": " 0"
    },
    {
      "user_id": " 1030000000091305",
      "is_notice_site": " 0",
      "is_notice_mail": " 0"
    },
    {
      "user_id": " 1030000000146026",
      "is_notice_site": " 0",
      "is_notice_mail": " 0"
    },
    {
      "user_id": " 1030000000141721",
      "is_notice_site": " 0",
      "is_notice_mail": " 0"
    },
    {
      "user_id": " 1030000000142354",
      "is_notice_site": " 0",
      "is_notice_mail": " 0"
    },
    {
      "user_id": " 1030000000144141",
      "is_notice_site": " 0",
      "is_notice_mail": " 0"
    },
    {
      "user_id": " 1030000000091353",
      "is_notice_site": " 0",
      "is_notice_mail": " 0"
    }
  ]
}

到此这篇关于PHP实现chrome表单请求数据转换为接口使用的json数据的文章就介绍到这了,更多相关PHP json请求内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
php empty()与isset()区别的详细介绍
Jun 17 PHP
php实现图片缩放功能类
Dec 18 PHP
destoon实现公司新闻详细页添加评论功能的方法
Jul 15 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
php获取文件名称和扩展名的方法
Feb 07 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 PHP
windows系统php环境安装swoole具体步骤
Mar 04 #PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 #PHP
php array_map()函数实例用法
Mar 03 #PHP
PHP的imageTtfText()函数深入详解
Mar 03 #PHP
PHP实现爬虫爬取图片代码实例
Mar 03 #PHP
PHP执行系统命令函数实例讲解
Mar 03 #PHP
Git命令之分支详解
Mar 02 #PHP
You might like
基于文本的访客签到簿
2006/10/09 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
初识Laravel
2014/10/30 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
javascript 获取图片颜色
2009/04/05 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
2016/08/17 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
jQuery实现手势解锁密码特效
2017/08/14 jQuery
Vuex新手的理解与使用详解
2019/05/31 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
Python函数中的可变长参数详解
2019/09/12 Python
Django数据库操作之save与update的使用
2020/04/01 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
高中生学习生活的自我评价
2013/10/09 职场文书
护理自荐信
2019/05/14 职场文书