javascript中 JSON 转XML 保存XML

JSON转XML

// 定义一个函数,将JSON数据转换为XML字符串
function jsonToXml(json) {
  var xml = '';
  if (typeof json !== 'object') {
    xml = json === undefined ? '' : String(json);
  } else if (Array.isArray(json)) {
    for (var i = 0; i < json.length; i++) {
      xml += jsonToXml(json[i]);
    }
  } else {
    for (var key in json) {
      var value = json[key];
      var child = jsonToXml(value);
      if (typeof value === 'object') {
        xml += '<' + key + '>' + child + '</' + key + '>';
      } else {
        xml += '<' + key + '>' + escapeXml(child) + '</' + key + '>';
      }
    }
  }
  return xml;
}

// 转义XML字符串中的特定字符
function escapeXml(text) {
  return text.replace(/&/g, '&amp;')
             .replace(/</g, '&lt;')
             .replace(/>/g, '&gt;')
             .replace(/"/g, '&quot;')
             .replace(/'/g, '&apos;');
}

XML保存文件到本地


// 转换JSON为XML
var xmlData = '<?xml version="1.0" encoding="UTF-8"?>' +
              '<root>' + jsonToXml(jsonData) + '</root>';

// 创建Blob对象
var blob = new Blob([xmlData], { type: 'application/xml' });

// 创建下载链接
var downloadLink = document.createElement("a");
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "n.xml";

// 触发下载
downloadLink.click();

// 清理资源
URL.revokeObjectURL(downloadLink.href);
downloadLink.remove();

整合成一个方法,输入JSON数据 和xml文件名 就可以下载

// 定义一个函数,将JSON数据转换为XML字符串
function jsonToXml(json) {
  var xml = '';
  if (typeof json !== 'object') {
    xml = json === undefined ? '' : String(json);
  } else if (Array.isArray(json)) {
    for (var i = 0; i < json.length; i++) {
      xml += jsonToXml(json[i]);
    }
  } else {
    for (var key in json) {
      var value = json[key];
      var child = jsonToXml(value);
      if (typeof value === 'object') {
        xml += '<' + key + '>' + child + '</' + key + '>';
      } else {
        xml += '<' + key + '>' + escapeXml(child) + '</' + key + '>';
      }
    }
  }
  return xml;
}

// 转义XML字符串中的特定字符
function escapeXml(text) {
  return text.replace(/&/g, '&amp;')
             .replace(/</g, '&lt;')
             .replace(/>/g, '&gt;')
             .replace(/"/g, '&quot;')
             .replace(/'/g, '&apos;');
}

// 定义一个函数,接受JSON数据和文件名,下载JSON数据为XML文件
function downloadJsonAsXml(jsonData, fileName) {
  // 转换JSON为XML
  var xmlData = '<?xml version="1.0" encoding="UTF-8"?>' +
                '<root>' + jsonToXml(jsonData) + '</root>';

  // 创建Blob对象
  var blob = new Blob([xmlData], { type: 'application/xml' });

  // 创建下载链接
  var downloadLink = document.createElement("a");
  downloadLink.href = URL.createObjectURL(blob);
  downloadLink.download = fileName;

  // 触发下载
  downloadLink.click();

  // 清理资源
  URL.revokeObjectURL(downloadLink.href);
  downloadLink.remove();
}

// 假设这是你的JSON数据
var jsonData = {
  "greeting": "Hello",
  "subject": "World"
};

// 调用函数,下载JSON数据为XML文件
downloadJsonAsXml(jsonData, "n.xml");

SMB拷贝到另一个目录SMB xcopy 备份【windows 运维】

@echo off
set sourceDir=D:\faa
set destDir=\\192.168.1.165\scan

echo 正在将文件从 %sourceDir% 拷贝到 %destDir% ...

xcopy "%sourceDir%\*" "%destDir%\" /E /I /D /Y

echo 拷贝完成。

将A机器的D盘中faa文件夹拷贝到\\192.168.1.165\scan

借助windows定时任务可以做到定时拷贝(一天一次 深夜执行)

这里是命令参数的解释:

/E 表示复制目录和子目录,包括空目录。
/I 表示如果目标不存在,假定它是一个目录。
/D 若文件更新才复制(适用于增量备份)
/Y 表示覆盖现有目标文件而不提示。

若aid相等则保留最大的did的那个数组,其余的删除,且保留原有的排序 PHP

$c = [
    ["aid" => 8, "did" => 1],
    ["aid" => 2, "did" => 3],
    ["aid" => 3, "did" => 4],
    ["aid" => 5, "did" => 5],
    ["aid" => 2, "did" => 6],
    ["aid" => 2, "did" => 9],
];


 public function retainLargestDid($array) {
        $maxDids = [];
        $filteredArray = [];

        foreach ($array as $item) {
            $aid = $item['aid'];
            $did = $item['did'];

            // 检查是否已经有这个aid的记录,如果没有或者找到了更大的did,则更新记录
            if (!isset($maxDids[$aid]) || $did > $maxDids[$aid]) {
                $maxDids[$aid] = $did;
            }
        }

        // 遍历原始数组,只保留具有最大did的元素
        foreach ($array as $item) {
            if ($item['did'] === $maxDids[$item['aid']]) {
                $filteredArray[] = $item;
            }
        }

        return $filteredArray;
    }

AV1编码器 libsvtav1

libsvtav1 编码器适应较好
ffmpeg -i input.mp4 -c:v libsvtav1 -b:v 600k output.mp4

B站1080P 下789kbps 的视频码率 196kpbs音频【音频我觉得96kpbs就够了】

动漫 1080P更低

ffmpeg -i gjj.mp4 -c:v libsvtav1 -crf 42 -b:a 96k 42.mp4

DASH切片

ffmpeg -i 42.mp4 -c:v copy  -c:a copy -dash 1 -f dash output.mpd

Dplayer

<div id="dplayer"></div>
<script src="dash.min.js"></script>

DASH必须在Dplayer上面加装
<script src="DPlayer.min.js"></script>

<script>
const dp = new DPlayer({
    container: document.getElementById('dplayer'),
    video: {
        url: 'demo.mpd',
        type: 'dash',
    },
    pluginOptions: {
        dash: {
            // dash config
        },
    },
});
console.log(dp.plugins.dash); // Dash 实例
</script>
video: {
        url: 'dplayer.mp4',
        pic: 'dplayer.png',
        thumbnails: 'thumbnails.jpg',
        type: 'auto',
    }

micropython 圆周率代码计算速度测试

import gc
from utime import ticks_ms, ticks_diff
import machine
import os

def pi(places=100):
    # 3 + 3*(1/24) + 3*(1/24)*(9/80) + 3*(1/24)*(9/80)*(25/168)
    # The numerators 1, 9, 25, ... are given by (2x + 1) ^ 2
    # The denominators 24, 80, 168 are given by (16x^2 -24x + 8)
    extra = 8
    one = 10 ** (places+extra)
    t, c, n, na, d, da = 3*one, 3*one, 1, 0, 0, 24

    while t > 1:
        n, na, d, da = n+na, na+8, d+da, da+32
        t = t * n // d
        c += t
    return c // (10 ** extra)

def pi_t(n=1000):
    gc.collect()
    t1 = ticks_ms()
    pi(n)
    t2 = ticks_ms()
    print('  ', ticks_diff(t2, t1), 'ms')


r = os.uname()
print('\n\n')
print('Pi calculation performance test')
print('===============================')
print('chip:', r.sysname)
print('ver: ', r.version)
try:
    print('Freq:', machine.freq())
except:
    print('Freq: unknow')
print('Ram: ', gc.mem_free() + gc.mem_alloc())
for i in (100, 500, 1000, 2000, 5000, 10000, 100000):
    try:
        print('\nCalc {} bits pi'.format(i))
        pi_t(i)
    except:
        print('Calc error!')