用华为云 AI 开发者空间做一个 JSON 本地工具:从需求到作品馆

举报
yd_242486459 发表于 2026/10/21 17:25:20 2026/10/21
【摘要】 用华为云 AI 开发者空间与 CodeArts 制作单文件 JSON 工具,分享格式化、压缩、语义比较的实现,以及特殊键名、原型链、大整数精度和本地处理边界。含源码与在线演示。

日常调试接口时,JSON 往往一会儿要看缩进,一会儿要压成单行,还要确认两个版本到底改了哪里。临时网页工具虽然多,但把业务数据粘贴到陌生网站总让人犹豫。我用华为云 AI 开发者空间和 CodeArts 做了一个单文件的「JSON 口袋工具箱」,重点放在轻量、直观和本地处理,再把成品发布到作品馆供人体验。

先把边界定清楚

工具只用 HTML、CSS 和原生 JavaScript,没有构建步骤、外部依赖、CDN 或统计代码。打开 index.html 就能使用。格式化和压缩都通过浏览器内置的 JSON.parse、JSON.stringify 完成;页面不需要后端接口,也不会把输入内容发送到服务器。对临时查看配置、请求响应或脱敏后的样例,这种结构省去了部署和账号配置,也让数据流向更容易理解。

格式化会按两个空格缩进输出,压缩则去掉多余空白。输入框有实时语法校验,界面同时展示输入、输出的 UTF-8 字节数和递归统计的对象键数量。结果还可以复制或下载成 output.json。一个顺手的流程是先载入示例熟悉界面,再粘贴待处理内容,校验通过后选择格式化或压缩;比较时分别贴入两个版本,查看路径和差异类型。错误提示尽量保留浏览器给出的解析信息;不同浏览器的行列提示可能略有差异,因此它适合快速定位,不替代编辑器诊断。

比较时看数据结构,而不是文本排版

文本逐字符比较很容易把缩进和键顺序当成变化。工具解析两份 JSON 后递归比较:对象按键和值匹配,忽略键的排列;数组则按位置比较,顺序有意义。例如下面两份对象结果相同:

{"user":{"name":"Lin","active":true},"tags":["api","test"]}
{"tags":["api","test"],"user":{"active":true,"name":"Lin"}}

但把数组改成 ["test","api"] 就会产生位置差异。界面会用路径指出新增、删除、值变化或类型变化,例如 $.user.name,数组元素则显示为 $[0]。这适用于检查配置版本或接口样例;它不是业务语义推理,例如不会判断两个不同字段是否代表同一概念。

比较实现里有一个容易忽略的边界:特殊键名。若用普通对象记录“见过哪些键”,__proto__ 可能触发原型相关行为,constructor 等名字也不应被当成普通状态标记。这里用 Object.create(null) 创建无原型的键集合,并通过 Object.prototype.hasOwnProperty.call 判断输入对象是否确实包含某键。差异路径对普通标识符使用点号,对带空格、符号等特殊名称使用方括号和 JSON 字符串转义,避免路径含义含混。用户输入只通过文本和值属性展示,没有作为 HTML 插入。

使用和数据限制

最简单的方式是下载源码后双击 index.html。也可在目录运行:

python3 -m http.server 8000 --bind 127.0.0.1

再打开 http://localhost:8000。页面处理发生在浏览器中,但这不等于所有数据都适合粘贴:请仍按组织的数据管理要求操作。工具使用 JavaScript 的 Number 解析数字,超过 2^53-1 的整数可能丢失精度;需要原样保存时,应把它作为字符串传递,例如 {"id":"9007199254740993"}。重复对象键也有边界:JSON.parse 通常只保留最后一个值,不会提示重复。数十 MB 的文件或很深的嵌套结构还可能令浏览器变慢或触发递归深度限制。

这个项目采用 AI 协作开发:由 CodeArts 生成初稿,结合源码检查修复边界问题,并在浏览器中验证了格式化、压缩、校验和比较交互。成品已发布到华为云开发者作品展览馆,作品名为“JSON 口袋工具箱”。复用时建议先用脱敏样例验证结果,再根据自己的使用场景扩展。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。