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开发者事半功倍的十大技巧小结
Apr 20 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
May 31 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
spl_autoload_register与autoload的区别详解
Jun 03 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
Jun 06 PHP
zend optimizer在wamp的基础上安装图文教程
Oct 26 PHP
常用PHP框架功能对照表
Oct 23 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
PHP程序中使用adodb连接不同数据库的代码实例
Dec 19 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
PHP7 新增常量
Mar 09 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 session有效期session.gc_maxlifetime
2011/04/20 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
2018/05/29 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
UserData用法总结 lanyu出品
2010/07/01 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
Vue实现todolist删除功能
2018/06/26 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
pandas 层次化索引的实现方法
2019/07/06 Python
pycharm配置git(图文教程)
2019/08/16 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
新闻专业个人求职信
2013/12/19 职场文书
个人收入证明范本
2014/01/12 职场文书
高二英语教学反思
2014/01/19 职场文书
日语系毕业求职信
2014/07/27 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
试用期辞职信范文
2015/03/02 职场文书
遗失证明范文
2015/06/19 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL