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 相关文章推荐
从零开始 教你如何搭建Discuz!4.1论坛
Jul 07 PHP
PHP面向对象法则
Feb 23 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
php的curl封装类用法实例
Nov 07 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
Nov 14 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
Jul 16 PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
Thinkphp5.0 框架Model模型简单用法分析
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
PHP+MYSQL中文乱码问题
2015/07/01 PHP
表单提交验证类
2006/07/14 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python解析xml文件实例分析
2015/05/27 Python
Python实现读取json文件到excel表
2017/11/18 Python
Python聊天室程序(基础版)
2018/04/01 Python
浅析PEP572: 海象运算符
2019/10/15 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
python 数据库查询返回list或tuple实例
2020/05/15 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
澳洲的服装老品牌:SABA
2018/02/06 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
我的网上商城创业计划书
2013/12/26 职场文书
中文专业毕业生自荐书范文
2014/01/04 职场文书
法律进社区实施方案
2014/03/21 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
小班开学寄语
2014/04/04 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python