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求最大子序列和的算法实现
Jun 24 PHP
php入门学习知识点一 PHP与MYSql连接与查询
Jul 14 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
php中try catch捕获异常实例详解
Nov 21 PHP
php格式化金额函数分享
Feb 02 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
php插件Xajax使用方法详解
Aug 31 PHP
使用vs code编辑调试php配置的方法
Jan 29 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 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中source #N问题的解决方法
2014/01/27 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
vue Element左侧无限级菜单实现
2020/06/10 Javascript
js实现表格数据搜索
2020/08/09 Javascript
[01:00:30]TFT vs VGJ.T Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python 图片验证码代码
2008/12/07 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
Sanic框架流式传输操作示例
2018/07/18 Python
python异常触发及自定义异常类解析
2019/08/06 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python FTP批量下载/删除/上传实例
2019/12/22 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
爱心捐款倡议书
2014/04/14 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
2019年最新借条范本!
2019/07/08 职场文书
对讲机知识
2022/04/07 无线电
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android