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若干单维数组遍历方法的比较
Sep 20 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
调整PHP的性能
Oct 30 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
php.ini save_handler 修改不生效的解决办法
Jul 22 PHP
基于PHP生成简单的验证码
Jun 01 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
PHP线程的内存回收问题
Jul 08 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 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
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
让PHP支持断点续传的源码
2010/05/16 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
Window下PHP三种运行方式图文详解
2013/06/11 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
详解webpack分离css单独打包
2017/06/21 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
用python找出那些被“标记”的照片
2017/04/20 Python
用TensorFlow实现戴明回归算法的示例
2018/05/02 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
什么是Python包的循环导入
2020/09/08 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
制药工程专业应届生求职信
2013/09/24 职场文书
给排水工程师岗位职责
2013/11/21 职场文书
学术会议欢迎词
2014/01/09 职场文书
活动宣传策划方案
2014/05/23 职场文书
2014年度培训工作总结
2014/11/27 职场文书
工作试用期自我评价
2015/03/10 职场文书
信用卡收入证明范本
2015/06/12 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android
青岛市的收音机研制与生产
2022/04/07 无线电