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 16 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
php 邮件发送问题解决
Mar 22 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
Apr 25 PHP
PHP中执行cmd命令的方法
Oct 11 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
PHP 使用redis简单示例分享
Mar 05 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
May 13 PHP
学习PHP session的传递方式
Jun 15 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
使用PHP开发留言板功能
Nov 19 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数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
php中配置文件操作 如config.php文件的读取修改等操作
2012/07/07 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
div移动 输入框不能输入的问题
2009/11/19 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
JavaScript Length 属性的总结
2015/11/02 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
JS回调函数深入理解
2019/10/16 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
python安装twisted的问题解析
2018/08/21 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
shell的种类有哪些
2015/04/15 面试题
小组名称和口号
2014/06/09 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
农村党员干部承诺书
2015/05/04 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python