IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Rust + Wasm 实现浏览器格式化 JSON -> 正文阅读

[JavaScript知识库]Rust + Wasm 实现浏览器格式化 JSON

效果链接 https://tothis.github.io/format/

源码 & 更多 Rust 使用合集 https://github.com/tothis/rust-record

用到的库

  • wasm-bindgen
  • serde_json
  • anyhow

用到的工具

cargo install wasm-pack

Cargo.toml

[package]
name = "wasm-bindgen-record"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib"]

[dependencies]
anyhow = "1.0"
wasm-bindgen = "0.2"
serde_json = "1.0"

src/lib.rs

use anyhow::Result;
use serde_json::{from_str, to_string_pretty, Value};
use wasm_bindgen::prelude::{JsValue, wasm_bindgen};

#[wasm_bindgen]
extern {
    fn alert(s: &str);

    #[wasm_bindgen(js_namespace = console)]
    fn log(s: &str);
}

#[wasm_bindgen]
pub fn format(s: &str) -> JsValue {
    JsValue::from(pretty(s).unwrap())
}

fn pretty(s: &str) -> Result<String> {
    Ok(to_string_pretty(&from_str::<Value>(s)?)?)
}

#[wasm_bindgen(start)]
pub fn start() {
    log("Wasm");
}

#[test]
fn test() -> Result<()> {
    assert_eq!(pretty(r#"{"key":"value"}"#)?, r#"{
  "key": "value"
}"#);
    Ok(())
}

index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>index</title>
    <style>
        html, body {
            height: 100%;
        }

        textarea {
            width: 100%;
            height: 50%;
        }

        button {
            width: 20%;
            height: 10%;
            font-size: 2rem;
            display: block;
            margin: auto;
        }
    </style>
</head>
<body>
<textarea>{"key":"value"}</textarea>
<button>format</button>
<script>
    const button = document.querySelector('button')
    const textarea = document.querySelector('textarea')
    import('./pkg/wasm_bindgen_record.js').then(async wasm => {
        await wasm.default()
        button.onclick = () => textarea.value = wasm.format(textarea.value)
    })
</script>
</body>
</html>

发布至浏览器

wasm-pack build --release --target web
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:23:13  更:2022-03-12 17:26:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:24:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码