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 相关文章推荐
提问的智慧
Oct 09 PHP
简单采集了yahoo的一些数据
Feb 14 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
PhpDocumentor 2安装以及生成API文档的方法
May 21 PHP
php中socket通信机制实例详解
Jan 03 PHP
详解PHP中的null合并运算符
Dec 30 PHP
PHP的全局错误处理详解
Apr 25 PHP
php array_key_exists() 与 isset() 的区别
Oct 24 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
mac pecl 安装php7.1扩展教程
Oct 17 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 字符串替换的方法
2012/01/10 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
IE iframe的onload方法分析小结
2010/01/07 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
清除输入框内的空格
2016/12/21 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
浅谈python装饰器探究与参数的领取
2017/12/01 Python
使用python绘制温度变化雷达图
2019/10/18 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
社区学雷锋活动策划方案
2014/01/30 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
心理咨询承诺书
2014/05/20 职场文书
公司催款律师函
2015/05/27 职场文书
Windows server 2012搭建FTP服务器
2022/04/29 Servers