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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
Oct 09 PHP
php cookie 登录验证示例代码
Mar 16 PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
深入HTTP响应状态码速查表的详解
Jun 07 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
Aug 14 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 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
浅谈PDO的rowCount函数
2015/06/18 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
vuex存储token示例
2019/11/11 Javascript
vue之延时刷新实例
2019/11/14 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python2.7简单连接与操作MySQL的方法
2016/04/27 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
利用python画出折线图
2018/07/26 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
Python如何实现线程间通信
2020/07/30 Python
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
技术总监管理岗位职责
2014/03/09 职场文书
给医院的感谢信
2015/01/21 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
民事诉讼代理词
2015/05/25 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书
Python3 如何开启自带http服务
2021/05/18 Python
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
python实现简单的三子棋游戏
2022/04/28 Python