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 相关文章推荐
防止本地用户用fsockopen DDOS攻击对策
Nov 02 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
解析php中heredoc的使用方法
Jun 17 PHP
php模板原理讲解
Nov 13 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php绘图之在图片上写中文和英文的方法
Jan 24 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 PHP
php微信开发之谷歌测距
Jun 14 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 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
详解HTTP Cookie状态管理机制
2016/01/14 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
jqPlot 基于jquery的画图插件
2011/04/26 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
浅谈javascript的调试
2015/01/28 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
react build 后打包发布总结
2018/08/24 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
微信小程序使用蓝牙小插件
2019/09/23 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
Python面向对象编程中的类和对象学习教程
2015/03/30 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
使用Python来开发微信功能
2018/06/13 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
在pycharm中显示python画的图方法
2019/08/31 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
Python中bisect的用法及示例详解
2020/07/20 Python
中科创达面试题
2016/12/28 面试题
EJB的几种类型
2012/08/15 面试题
行政上诉状范文
2015/05/23 职场文书
紧急迫降观后感
2015/06/15 职场文书
在职证明范本
2015/06/15 职场文书
村官2015年度工作总结
2015/10/14 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python