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发电子邮件
Oct 09 PHP
随时给自己贴的图片加文字的php代码
Mar 08 PHP
php导出word格式数据的代码实例
Nov 25 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
php 数组元素快速去重
May 05 PHP
php中通用的excel导出方法实例
Dec 30 PHP
php实现数组重复数字统计实例
Sep 30 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 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 5.0对象模型深度探索之绑定
2006/09/05 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
使用JS画图之点、线、面
2015/01/12 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
Python实现股市信息下载的方法
2015/06/15 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
python安装scipy的步骤解析
2019/09/28 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
Ibatis的核心配置文件都有什么
2014/09/08 面试题
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
工厂厂长的职责
2013/12/12 职场文书
个人租房协议书
2014/04/09 职场文书
工会换届选举方案
2014/05/21 职场文书
医学专业自荐信
2014/06/14 职场文书
教师暑期培训感言
2014/08/15 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
安全承诺书
2015/01/19 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书