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出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
Codeigniter实现发送带附件的邮件
Mar 19 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
PHP curl模拟登录带验证码的网站
Nov 30 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 PHP
php入门教程之Zend Studio设置与开发实例
Sep 09 PHP
php-msf源码详解
Dec 25 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 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
最简单的PHP程序--记数器
2006/10/09 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
基于laravel制作APP接口(API)
2016/03/15 PHP
页面中js执行顺序
2009/11/09 Javascript
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
Python获取某一天是星期几的方法示例
2017/01/17 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
酒吧员工的岗位职责
2013/11/26 职场文书
军训自我鉴定200字
2014/02/13 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
小组口号大全
2014/06/09 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
中国世界遗产导游词
2015/02/13 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
windows安装python超详细图文教程
2021/05/21 Python