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生成缩略图的代码
Jan 12 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
PHP学习笔记 (1) 环境配置与代码调试
Jun 19 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 PHP
处理单名多值表单的详解
Jun 08 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
PHP函数实现分页含文本分页和数字分页
Oct 23 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 PHP
PHP获取ip对应地区和使用网络类型的方法
Mar 11 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
May 23 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
windows下安装php的memcache模块的方法
2015/04/07 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
基于JavaScript自定义构造函数的详解说明
2013/04/24 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
使用p5.js临摹动态图形
2019/10/23 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
python写入中英文字符串到文件的方法
2015/05/06 Python
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
通过cmd进入python的步骤
2020/06/16 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
劳动竞赛活动方案
2014/02/20 职场文书
优质服务演讲稿
2014/05/14 职场文书
雨中的树观后感
2015/06/03 职场文书
感谢信
2019/04/11 职场文书
如何在Python中妥善使用进度条详解
2022/04/05 Python