@docx4j/jsonix

中文文档
3.13.0发布于 2026/11/07(Apache-2.0 AND BSD-2-Clause)TypeScriptESM + CJS构建来源已验证近 30 天下载 3253

Jsonix(为XML的JSON接口)是一个JavaScript库,允许在XML和JSON结构之间转换.

中文使用文档
文档目录8 节
  1. 示例
  2. 生成绘图
  3. 将 XML 分析为 JS
  4. 将JS 序列化为 XML
  5. 类型脚本
  6. Jsonix 特性
  7. 文档
  8. 线性

日记

  • Jsonix(为XML的JSON接口)是一个JavaScript库,允许您在XML和JSON结构之间转换.
  • 通过 Jsonix 您可以将 XML 解析为 JSON( 这个进程叫做 解除挂载)或以 XML 形式将 JSON 序列化(这叫做 排列) (中文(简体) ).
  • 这些转换是基于可手动写入或由XML Schema生成的可声明的XML/JSON映射.

Jsonix 的优点 :

  • 结构严密
  • 类型安全
  • 双向
  • (可选) XML Schema 驱动

另见其他 Jsonix 特性。 。 。 .

示例

这里有个例子 定购单计划a (试试看) 在 JSFiddle 网上) (中文(简体) ).

生成绘图

绘图由单独的 jsonix-schema- 编译器 (JDK 11+;其罐子不属于此套件):

java -jar jsonix-schema-compiler-full-<VERSION>.jar -d mappings -p PO purchaseorder.xsd [-b bindings.xjb]

生成用于 purchaseorder.xsd 计划 mappings/PO.js; 绘图将放置在变量中 PO。 。 。 . 绑定文件( E).xjb)必须使用雅加达命名空间(xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb", (中文(简体) ), version="3.0"(中文(简体) ) 含有当前编译器发布; 旧的自定义 http://java.sun.com/xml/ns/jaxb 命名空间被默默忽略 .

将 XML 分析为 JS

// Include or require PO.js so that PO variable is available
// For instance, in node.js:
var PO = require('./mappings/PO').PO;

// First we construct a Jsonix context - a factory for unmarshaller (parser)
// and marshaller (serializer)
var context = new Jsonix.Context([PO]);

// Then we create a unmarshaller
var unmarshaller = context.createUnmarshaller();

// Unmarshal an object from the XML retrieved from the URL
unmarshaller.unmarshalURL('po.xml',
    // This callback function will be provided
    // with the result of the unmarshalling
    function (unmarshalled) {
        // Alice Smith
        console.log(unmarshalled.value.shipTo.name);
        // Baby Monitor
        console.log(unmarshalled.value.items.item[1].productName);
    });

你也可以这样 unmarshalString, (中文(简体) ), unmarshalDocument 和(节点下) unmarshalFile。 。 。 .

将JS 序列化为 XML

// Create a marshaller
var marshaller = context.createMarshaller();

// Marshal a JavaScript Object as XML (DOM Document)
var doc = marshaller.marshalDocument({
    name: {
        localPart: "purchaseOrder"
    },
    value: {
        orderDate: { year: 1999, month: 10, day: 20 },
        shipTo: {
            country: "US",
            name: "Alice Smith",
            street: "123 Maple Street",
            city: "Mill Valley",
            state: "CA",
            zip: 90952
        },
        billTo: { /* ... */ },
        comment: 'Hurry, my lawn is going wild!',
        items: { /* ... */ }
    }
});

你也可以这样 marshalString。 。 。 .

类型脚本

用 -generateTypeScript 要在每个映射文件旁边获得描述 jsonix unmarshals 和元帅(PO.d.ts) (中文(简体) ). 加上这个包本身的打字,结果不需要投出:

import { Jsonix } from '@docx4j/jsonix';
import { PO } from './mappings/PO';
import type { PurchaseOrderElement, USAddress } from './mappings/PO';

const context = new Jsonix.Context([PO]);
const element = context.createUnmarshaller().unmarshalString(xml);   // RootElement, inferred from PO
const po = context.createUnmarshaller().unmarshalString<PurchaseOrderElement>(xml).value;
po.shipTo.name;        // string
po.orderDate?.year;    // number | undefined: dates are Jsonix calendars, not JS Dates

const shipTo: USAddress = { name: 'Alice Smith', street: '123 Maple Street', city: 'Mill Valley', state: 'CA', zip: 90952 };
const text = context.createMarshaller().marshalString<PurchaseOrderElement>({
    name: { namespaceURI: '', localPart: 'purchaseOrder' },
    value: { shipTo, billTo: shipTo, items: {} }
});
  • 解帆归来 Jsonix.TypedNamedValue<T>,也就是说. { name: QName, value: T }; 生成的文件异名于此 全球因素PurchaseOrderElement作为他们中的所有人RootElement) (中文(简体) ). 生成的映射 常数被声明为 JsonixMapping<RootElement>,因此从生成的绘图中构建的上下文推断该联盟是 结果 unmarshal* 当没有给出类型参数时;一个类型参数会缩小它.
  • 无标记物体携带 TYPE_NAME (例如:. 'PO.USAddress'),生成的界面宣布为字面 可用作歧视者的类型。 它对于输入是可选的; 在集合时不需要设置它 .
  • 编译器也可以将映射写成ES模块(<jsonix:output format="esm"/> 给 PO.mjs),这个 软件包有一个ES模块的切入点,所以 import { Jsonix } from '@docx4j/jsonix' 在节点无害环境管理和捆绑公司工作.
  • 节点和节点捆绑商获得一个输入DOM依赖的静态进口(jsonix.node.mjs,由 软件包 exports node 条件,浏览器的条目为无(jsonix.mjs(三); require() 保留UMD。 何处 运行时间无法检测其环境(工人、沙箱), Jsonix.DOM.use({ DOMParser, XMLSerializer, DOMImplementation }) 提供DOM供使用。 在节点中,XML 1.0文本保留了原始的 U+0085和 U+2028 (xmldom 默认值) 会把它们变成线性信号.
  • context.createUnmarshaller({ onUnexpectedElement, onUnexpectedAttribute }) 报告阅读量下降(不是 校验符:无内容报告的通配符 onUnexpectedElement 设置,一个元素 无法持有是 跳过并报告 而不是失败读取, onOverwrittenElement 后置元素在 单值财产(最后一项储存,不论有无), context.createMarshaller({ onElement }) 记录 而错误的输入值名称中的错误 线条。 提供给 createUnmarshaller 编号 : createMarshaller 仅适用于该呼叫,绝不更改共享 上下文.
  • new Jsonix.Context(mappings, { parentPointers: true }) 给每个未标记的打字对象一个不可假定的 PARENT 指向其包含的打字对象(根对象无),以及 Jsonix.Util.deepCopy(value, parent?) 复制子树并重新链接指针, 如 docx4j's -Xparent-pointer 编号 : -Xdocx4j-copy 型号。 已生成 声明类型 PARENT 作为可以包含每种类型的类型结合. PARENT 不可见 for...in, (中文(简体) ), Object.keysJSON和马歇尔.

Jsonix 特性

  • 在几乎所有现代浏览器中运行
  • 运行在 节点.js
  • 使用通用JS模块、ES模块、AMD模块和香草(全局,没有任何模块加载器)运行
  • 由jsonix-schema-编译器生成的申报书所编译的脚本打字(见 类型脚本(中文(简体) )
  • 双向(XML - > JS以及JS - > XML)
  • 执行 排列 (将 JavaScript 对象序列化为 XML)
    • 因此支持字符串数据和 DOM 节点
  • 执行 解除挂载 (从 XML 分析一个 JavaScript 对象)
    • 支持字符串数据、 DOM 节点、 URL 或文件( 有节点
  • 由可控制 JavaScript 对象如何转换成 XML 或反之相向的宣告性 XML/JS 映射驱动
  • 绘图可以基于 XML Schema 自动生成
  • 强结构 - XML/ 对象映射描述 JavaScript 对象的结构
  • 强类型 - XML 侧的字符串内容和JavaScript 侧的值之间的转换由声明属性类型控制
  • 提供可扩展类型系统
    • 支持大多数 XML Schema 简单类型( 插入 QNames)
    • 支持列举、列表和联盟简单类型
    • 允许添加自己的简单类型
    • 支持由多个属性组成的复杂类型
    • 扩展后产生的复杂类型支持
  • 提供高级财产系统
    • XML 内容的字符串处理值、 属性、 元素、 元素、 元素参考属性
    • 任意属性, XML 内容的“ 放松” 处理的任何元素属性

文档

线性

从 高来源/日索尼克斯 (阿列克谢·瓦利科夫博士) 麻省理工学院的叉子 (单位:千美元)@mitre/jsonix页:1 从3.2.0起,由 插图 时间 笔迹/jsonix 发表于 @docx4j/jsonix。 。 。 .

版本与发布记录

@docx4j/jsonix 共发布 15 个版本,首次发布于 2026/09/14;过去 12 个月发布了 15 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.13.0latest2026/11/076 天前
3.12.02026/11/067 天前
3.11.02026/10/2816 天前
3.10.02026/10/2816 天前
3.9.02026/10/2618 天前
3.8.02026/10/2420 天前

关于 @docx4j/jsonix 的常见问题

@docx4j/jsonix 是什么?

Jsonix(为XML的JSON接口)是一个JavaScript库,允许在XML和JSON结构之间转换.

如何安装 @docx4j/jsonix?

在项目目录运行 npm install @docx4j/jsonix,或使用 pnpm add / yarn add / bun add。

@docx4j/jsonix 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@docx4j/jsonix 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@docx4j/jsonix 可以商用吗?

@docx4j/jsonix 使用 (Apache-2.0 AND BSD-2-Clause) 许可。声明的许可为 (Apache-2.0 AND BSD-2-Clause),请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@docx4j/jsonix 的下载量有多少?

根据 npm 官方下载统计,@docx4j/jsonix 在 2026/10/13 – 2026/11/11 这 30 天内被下载 3,253 次,日均约 108 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@docx4j/jsonix 还在维护吗?

最新版本 3.13.0 发布于 2026/11/07(6 天前);至今共发布 15 个版本,其中过去 12 个月发布了 15 个;首次发布于 2026/09/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。