DevToolBox免费
博客

XML转JSON转换器指南:JavaScript、Python、Java和CLI示例

18分钟阅读作者 DevToolBox

XML 到 JSON 转换是现代软件开发中最常见的数据转换任务之一。随着组织从传统的基于 SOAP 的 Web 服务迁移到 RESTful API,将 XML 转换为 JSON 的需求急剧增长。无论您处理的是企业配置文件、RSS 源还是 SOAP API 响应,高效的 XML 到 JSON 转换器可以节省大量手动工作时间。本综合指南涵盖了从底层解析机制到 JavaScript、Python、Java 和 Bash 的生产级代码示例的所有内容。

立即试用我们的免费在线 XML 到 JSON 转换工具。

什么是 XML 到 JSON 转换?

XML(可扩展标记语言)JSON(JavaScript 对象表示法)是两种最广泛使用的数据交换格式。XML 主导了企业计算数十年,驱动 SOAP Web 服务、配置文件和 SVG、XHTML、RSS 等文档格式。JSON 作为轻量级替代方案出现,因其简洁性和原生 JavaScript 兼容性而受到 Web 开发者的青睐。

XML 到 JSON 转换器接收格式良好的 XML 文档并将其转换为等效的 JSON 表示。此过程涉及将 XML 元素映射为 JSON 对象、处理 XML 属性、文本节点、命名空间、CDATA 部分和混合内容。不同的转换约定(如 Badgerfish、Parker 和 GData)定义了属性、文本内容和命名空间如何映射到 JSON 属性的具体规则。

反向操作——JSON 到 XML 转换,在将现代服务与传统 XML 系统集成时同样重要。常见用例包括:SOAP 到 REST API 网关层、将 XML 数据导入 Elasticsearch 或 MongoDB 的 ETL 管道、消费 XML RSS 源的移动应用,以及需要在 XML 和 JSON 配置格式之间转换的基础设施即代码工具。

XML 与 JSON:详细对比

在深入转换技术之前,了解 XML 和 JSON 的结构差异至关重要。这个对比有助于解释为什么在 XML 到 JSON 转换过程中会出现某些边缘情况:

特性XMLJSON
语法基于标签的标记,有开始/结束标签花括号和方括号的键值对
属性元素上原生支持属性没有属性概念,一切都是属性
命名空间通过 xmlns 声明完全支持无原生命名空间支持
注释支持标准 JSON 不支持
CDATA支持原始文本不适用,字符串处理所有文本
模式验证XSD、DTD、RelaxNGJSON Schema
可读性冗长但自描述紧凑易读
文件大小由于关闭标签和属性较大通常小 30-50%
解析器DOM、SAX、StAX、XPath、XSLTJavaScript 原生支持

XML 到 JSON 转换的工作原理

XML 到 JSON 转换过程涉及 XML 解析器必须处理的几个关键步骤:

  1. 解析 XML 文档:XML 解析器读取输入并构建树结构(DOM)或触发事件(SAX/StAX)。
  2. 将元素映射为对象:每个 XML 元素成为 JSON 对象属性。
  3. 处理属性:使用前缀(如 @)将属性映射为 JSON 键。
  4. 处理文本节点:纯文本元素映射为字符串值,混合内容使用 #text 键。
  5. 将重复元素转换为数组:XML 中的重复元素在 JSON 中变成数组。
  6. 处理命名空间:保留为前缀键或根据配置去除。

几种已建立的约定定义了 XML 结构如何映射到 JSON:

  • Badgerfish 约定:保留所有 XML 信息,包括属性(@ 前缀)和文本内容($ 键)。最无损但产生冗长的 JSON。
  • Parker 约定:产生最紧凑的 JSON,丢弃属性,将纯文本元素转换为简单值。
  • GData 约定:Google API 使用的中间方案,属性使用 $ 前缀,文本使用 $t

XML 到 JSON 代码示例

JavaScript:XML 到 JSON

在 JavaScript 中,有多种方法可以进行 XML 到 JSON 转换。浏览器提供内置的 DOMParser 用于解析 XML,流行的 npm 包如 fast-xml-parserxml2js 提供了强大的转换功能:

// ===== Using fast-xml-parser (recommended) =====
// npm install fast-xml-parser

import { XMLParser, XMLBuilder } from 'fast-xml-parser';

const xml = `<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book id="1" category="fiction">
    <title lang="en">The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <price currency="USD">10.99</price>
    <year>1925</year>
  </book>
  <book id="2" category="non-fiction">
    <title lang="en">Sapiens</title>
    <author>Yuval Noah Harari</author>
    <price currency="USD">14.99</price>
    <year>2011</year>
  </book>
</bookstore>`;

// Configure parser with attribute handling
const parser = new XMLParser({
  ignoreAttributes: false,       // preserve attributes
  attributeNamePrefix: '@_',     // prefix for attributes
  textNodeName: '#text',         // key for text content
  isArray: (name, jpath) => {    // force arrays for known collections
    return ['bookstore.book'].includes(jpath);
  },
});

const json = parser.parse(xml);
console.log(JSON.stringify(json, null, 2));
// Output:
// {
//   "bookstore": {
//     "book": [
//       {
//         "@_id": "1",
//         "@_category": "fiction",
//         "title": { "@_lang": "en", "#text": "The Great Gatsby" },
//         "author": "F. Scott Fitzgerald",
//         "price": { "@_currency": "USD", "#text": 10.99 },
//         "year": 1925
//       },
//       ...
//     ]
//   }
// }

// ===== Using DOMParser (browser built-in) =====

function xmlToJson(xmlString) {
  const parser = new DOMParser();
  const doc = parser.parseFromString(xmlString, 'text/xml');

  function nodeToJson(node) {
    const obj = {};

    // Handle attributes
    if (node.attributes && node.attributes.length > 0) {
      for (let i = 0; i < node.attributes.length; i++) {
        const attr = node.attributes[i];
        obj['@' + attr.nodeName] = attr.nodeValue;
      }
    }

    // Handle child nodes
    if (node.childNodes && node.childNodes.length > 0) {
      for (let i = 0; i < node.childNodes.length; i++) {
        const child = node.childNodes[i];
        if (child.nodeType === 1) { // Element node
          const childObj = nodeToJson(child);
          if (obj[child.nodeName]) {
            // Convert to array if duplicate element names
            if (!Array.isArray(obj[child.nodeName])) {
              obj[child.nodeName] = [obj[child.nodeName]];
            }
            obj[child.nodeName].push(childObj);
          } else {
            obj[child.nodeName] = childObj;
          }
        } else if (child.nodeType === 3) { // Text node
          const text = child.nodeValue.trim();
          if (text) {
            if (Object.keys(obj).length === 0) return text;
            obj['#text'] = text;
          }
        } else if (child.nodeType === 4) { // CDATA section
          obj['#cdata'] = child.nodeValue;
        }
      }
    }
    return obj;
  }

  const root = doc.documentElement;
  const result = {};
  result[root.nodeName] = nodeToJson(root);
  return result;
}

// ===== Using xml2js (Node.js) =====
// npm install xml2js

import { parseString } from 'xml2js';

parseString(xml, {
  explicitArray: false,
  mergeAttrs: true,
  trim: true,
}, (err, result) => {
  if (err) throw err;
  console.log(JSON.stringify(result, null, 2));
});

// ===== Streaming large XML with sax (Node.js) =====
// npm install sax

import sax from 'sax';

const saxParser = sax.createStream(true, { trim: true });
const stack = [];
let current = {};

saxParser.on('opentag', (node) => {
  const obj = {};
  if (node.attributes) {
    for (const [key, value] of Object.entries(node.attributes)) {
      obj['@' + key] = value;
    }
  }
  stack.push(current);
  current[node.name] = obj;
  current = obj;
});

saxParser.on('text', (text) => {
  if (text.trim()) current['#text'] = text.trim();
});

saxParser.on('closetag', () => {
  current = stack.pop();
});

Python:XML 到 JSON

对于 Python XML 到 JSON 转换,xmltodict 库是最流行的选择。Python 还提供了内置的 xml.etree.ElementTree 和面向安全的 defusedxml

# ===== Using xmltodict (most popular) =====
# pip install xmltodict

import xmltodict
import json

xml_string = """<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <product id="101" category="electronics">
    <name>Wireless Mouse</name>
    <price currency="USD">29.99</price>
    <specs>
      <weight unit="g">85</weight>
      <battery>AA</battery>
      <connectivity>Bluetooth 5.0</connectivity>
    </specs>
    <tags>
      <tag>wireless</tag>
      <tag>mouse</tag>
      <tag>bluetooth</tag>
    </tags>
  </product>
</catalog>
"""

# Convert XML to Python dict (then to JSON)
data = xmltodict.parse(xml_string)
json_output = json.dumps(data, indent=2, ensure_ascii=False)
print(json_output)
# Output:
# {
#   "catalog": {
#     "product": {
#       "@id": "101",
#       "@category": "electronics",
#       "name": "Wireless Mouse",
#       "price": { "@currency": "USD", "#text": "29.99" },
#       "specs": {
#         "weight": { "@unit": "g", "#text": "85" },
#         "battery": "AA",
#         "connectivity": "Bluetooth 5.0"
#       },
#       "tags": { "tag": ["wireless", "mouse", "bluetooth"] }
#     }
#   }
# }

# Force specific elements to always be lists
data = xmltodict.parse(xml_string, force_list=('product', 'tag'))

# ===== Using defusedxml for security =====
# pip install defusedxml

import defusedxml.ElementTree as ET

# Safe parsing - blocks XXE, entity expansion, etc.
tree = ET.fromstring(xml_string)

def element_to_dict(element):
    result = {}

    # Handle attributes
    if element.attrib:
        for key, value in element.attrib.items():
            result[f'@{key}'] = value

    # Handle child elements
    children = list(element)
    if children:
        for child in children:
            child_data = element_to_dict(child)
            if child.tag in result:
                # Convert to list for repeated elements
                if not isinstance(result[child.tag], list):
                    result[child.tag] = [result[child.tag]]
                result[child.tag].append(child_data)
            else:
                result[child.tag] = child_data
    elif element.text and element.text.strip():
        if result:  # Has attributes
            result['#text'] = element.text.strip()
        else:
            return element.text.strip()

    return result

root = tree
json_data = {root.tag: element_to_dict(root)}
print(json.dumps(json_data, indent=2))

# ===== Using lxml with XPath =====
# pip install lxml

from lxml import etree

tree = etree.fromstring(xml_string.encode())

# Extract specific data with XPath, output as JSON
products = []
for product in tree.xpath('//product'):
    products.append({
        'id': product.get('id'),
        'name': product.xpath('name/text()')[0],
        'price': float(product.xpath('price/text()')[0]),
        'currency': product.xpath('price/@currency')[0],
    })
print(json.dumps(products, indent=2))

Bash / CLI:XML 到 JSON

命令行工具如 xq(来自 yq)和 xmlstarlet 可直接在终端进行 XML 到 JSON 转换:

# ===== Using xq (part of yq, recommended) =====
# Install: pip install yq  OR  brew install yq

# Basic XML to JSON conversion
cat data.xml | xq .
# Or directly from a file
xq . data.xml

# Pretty-print with specific fields
xq '.catalog.product[] | {name: .name, price: .price}' data.xml

# Convert and save to file
xq . input.xml > output.json

# Extract specific values
xq -r '.catalog.product.name' data.xml

# ===== Using xmlstarlet =====
# Install: brew install xmlstarlet  OR  apt install xmlstarlet

# Select specific elements
xmlstarlet sel -t -v "//product/name" data.xml

# Convert to a flat key-value format
xmlstarlet sel -t \
  -m "//product" \
  -v "@id" -o "," \
  -v "name" -o "," \
  -v "price" -n data.xml

# ===== Python one-liners =====

# Quick XML to JSON from command line
python3 -c "
import xmltodict, json, sys
print(json.dumps(xmltodict.parse(sys.stdin.read()), indent=2))
" < data.xml

# Using built-in xml.etree (no pip install needed)
python3 -c "
import xml.etree.ElementTree as ET, json, sys
root = ET.parse(sys.stdin).getroot()
def to_dict(el):
    d = dict(el.attrib)
    children = list(el)
    if children:
        for c in children:
            cd = to_dict(c)
            if c.tag in d:
                if not isinstance(d[c.tag], list): d[c.tag] = [d[c.tag]]
                d[c.tag].append(cd)
            else: d[c.tag] = cd
    elif el.text and el.text.strip():
        if d: d['#text'] = el.text.strip()
        else: return el.text.strip()
    return d
print(json.dumps({root.tag: to_dict(root)}, indent=2))
" < data.xml

# ===== Using curl + xq for API responses =====

# Fetch XML API and convert to JSON
curl -s "https://api.example.com/data.xml" | xq .

# SOAP response to JSON
curl -s -X POST "https://api.example.com/soap" \
  -H "Content-Type: text/xml" \
  -d @request.xml | xq '.Envelope.Body'

Java:XML 到 JSON

在 Java 中,Jackson XML 模块和 org.json 库是 XML 到 JSON 转换的主要工具:

// ===== Using org.json (simple conversion) =====
// Maven: org.json:json:20231013

import org.json.JSONObject;
import org.json.XML;

public class XmlToJsonExample {
    public static void main(String[] args) {
        String xml = """
            <bookstore>
              <book id="1">
                <title>Clean Code</title>
                <author>Robert C. Martin</author>
                <price>32.99</price>
              </book>
            </bookstore>
            """;

        // Simple one-line conversion
        JSONObject json = XML.toJSONObject(xml);
        System.out.println(json.toString(2));

        // With configuration
        JSONObject jsonKeepStrings = XML.toJSONObject(xml, true);
        // true = keep all values as strings (no type coercion)
    }
}

// ===== Using Jackson XML (more control) =====
// Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-xml

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class JacksonXmlExample {
    public static void main(String[] args) throws Exception {
        String xml = "<book id=\"1\"><title>Clean Code</title></book>";

        XmlMapper xmlMapper = new XmlMapper();
        JsonNode node = xmlMapper.readTree(xml.getBytes());

        ObjectMapper jsonMapper = new ObjectMapper();
        String json = jsonMapper
            .writerWithDefaultPrettyPrinter()
            .writeValueAsString(node);

        System.out.println(json);
    }
}

// ===== Secure XML parsing in Java =====

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.XMLConstants;

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

// Prevent XXE attacks
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
dbf.setFeature(
    "http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature(
    "http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature(
    "http://xml.org/sax/features/external-parameter-entities", false);
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);

JSON 到 XML 转换

反向的 JSON 到 XML 转换有其独特的挑战。虽然 XML 到 JSON 通常很直接,但从 JSON 到 XML 需要决定如何在 XML 中表示 JSON 结构:

JSON 到 XML 转换的关键挑战:JSON 数组没有直接的 XML 等效物,必须表示为重复元素。JSON null 值需要表示(空元素或 xsi:nil)。JSON 属性名可能包含在 XML 元素名中无效的字符。

以下代码示例展示了 JavaScript 和 Python 中的 JSON 到 XML 转换:

// ===== JavaScript: JSON to XML =====

import { XMLBuilder } from 'fast-xml-parser';

const jsonData = {
  catalog: {
    product: [
      {
        '@_id': '101',
        name: 'Wireless Mouse',
        price: { '@_currency': 'USD', '#text': '29.99' },
        tags: { tag: ['wireless', 'mouse'] },
      },
      {
        '@_id': '102',
        name: 'Keyboard',
        price: { '@_currency': 'USD', '#text': '49.99' },
        tags: { tag: ['keyboard', 'mechanical'] },
      },
    ],
  },
};

const builder = new XMLBuilder({
  ignoreAttributes: false,
  attributeNamePrefix: '@_',
  textNodeName: '#text',
  format: true,           // pretty print
  indentBy: '  ',
  suppressEmptyNode: true,
});

const xml = builder.build(jsonData);
console.log(xml);

# ===== Python: JSON to XML =====

import xmltodict

json_data = {
    'catalog': {
        'product': {
            '@id': '101',
            'name': 'Wireless Mouse',
            'price': {'@currency': 'USD', '#text': '29.99'},
        }
    }
}

xml_output = xmltodict.unparse(json_data, pretty=True)
print(xml_output)
# Output:
# <?xml version="1.0" encoding="utf-8"?>
# <catalog>
#   <product id="101">
#     <name>Wireless Mouse</name>
#     <price currency="USD">29.99</price>
#   </product>
# </catalog>

XML 到 JSON 转换的边缘情况处理

生产级 XML 到 JSON 转换器必须处理许多可能导致简单实现出错的边缘情况:

XML 属性:最常见的边缘情况。属性没有 JSON 等效物,转换器必须选择约定(如 @attr 前缀)。

CDATA 部分:包含未解析文本的 CDATA 部分,大多数转换器将其视为普通文本。

命名空间:XML 命名空间增加了复杂性,转换器可以保留、去除或映射命名空间。

混合内容:包含文本和子元素的元素特别具有挑战性。

自关闭标签和空元素:空元素可以转换为 null、空字符串或空对象。

重复元素(数组检测):最棘手的问题之一,需要确定何时使用数组。

空白处理:元素间的无关紧要空白应被忽略,但文本节点内的空白是有意义的。

XML 声明和 DTD:XML 声明和 DOCTYPE 声明是元数据,不映射到 JSON 属性。

// Edge case examples: XML to JSON

// 1. Attributes + text content
// XML:  <price currency="USD">29.99</price>
// JSON: { "price": { "@currency": "USD", "#text": "29.99" } }

// 2. CDATA section
// XML:  <script><![CDATA[if (a < b) { alert("hello"); }]]></script>
// JSON: { "script": "if (a < b) { alert(\"hello\"); }" }

// 3. Namespaces
// XML:  <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
//         <soap:Body><GetPrice><Item>Apple</Item></GetPrice></soap:Body>
//       </soap:Envelope>
// JSON: { "soap:Envelope": { "soap:Body": { "GetPrice": { "Item": "Apple" } } } }

// 4. Mixed content
// XML:  <p>Hello <b>world</b> today</p>
// JSON: { "p": { "#text": ["Hello ", " today"], "b": "world" } }

// 5. Self-closing / empty elements
// XML:  <br/>  OR  <item></item>
// JSON: { "br": null }  OR  { "item": "" }

// 6. Single vs multiple children (array detection)
// XML (one child):   <items><item>A</item></items>
// JSON (no array):   { "items": { "item": "A" } }
// XML (two children):<items><item>A</item><item>B</item></items>
// JSON (array):      { "items": { "item": ["A", "B"] } }
// Solution: use isArray option in fast-xml-parser or force_list in xmltodict

// 7. Whitespace preservation
// XML:  <code xml:space="preserve">  hello  world  </code>
// JSON: { "code": "  hello  world  " }

// 8. XML declaration (dropped in JSON)
// XML:  <?xml version="1.0" encoding="UTF-8"?>
// JSON: (not included in output)

XML 安全最佳实践

构建 XML 到 JSON 转换器或使用任何 XML 解析器时,安全性至关重要。XML 有几个已知的攻击向量:

XXE(XML 外部实体)攻击:最关键的 XML 漏洞。攻击者制作包含外部实体声明的 XML 文档,引用本地文件或内部网络资源。预防方法:禁用外部实体处理。

十亿笑声攻击(XML 炸弹):使用嵌套实体展开消耗指数级内存的拒绝服务攻击。缓解方法:限制实体展开深度和总展开大小。

通过 DTD 的外部实体注入:即使直接 XXE 被阻止,攻击者也可能使用参数实体和外部 DTD 引用来窃取数据。预防方法:禁用所有外部 DTD 加载。

安全的 XML 解析器配置:每种主要编程语言都需要为 XML 解析器进行显式安全配置。Python 使用 defusedxml,Java 设置安全特性,JavaScript 使用 fast-xml-parser 并禁用实体处理。

// ===== Secure XML parsing examples =====

// --- Python: Use defusedxml ---
# UNSAFE: xml.etree.ElementTree (vulnerable to XXE)
import xml.etree.ElementTree as ET  # DO NOT use with untrusted XML

# SAFE: defusedxml blocks all known XML attacks
import defusedxml.ElementTree as SafeET
tree = SafeET.fromstring(untrusted_xml)  # Safe!

# defusedxml blocks:
# - XML External Entity (XXE) attacks
# - Billion Laughs (entity expansion) attacks
# - External DTD retrieval
# - Decompression bombs

# --- Java: Secure DocumentBuilderFactory ---
import javax.xml.parsers.DocumentBuilderFactory;

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// Disable all dangerous features
dbf.setFeature(
    "http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature(
    "http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature(
    "http://xml.org/sax/features/external-parameter-entities", false);
dbf.setFeature(
    "http://apache.org/xml/features/nonvalidating/load-external-dtd",
    false);
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);

// --- JavaScript (Node.js): fast-xml-parser ---
import { XMLParser } from 'fast-xml-parser';

const secureParser = new XMLParser({
  // fast-xml-parser does NOT process entities by default (safe)
  processEntities: false,       // explicitly disable
  htmlEntities: false,          // don't process HTML entities
  allowBooleanAttributes: false,
});

// --- .NET: Secure XmlReaderSettings ---
// XmlReaderSettings settings = new XmlReaderSettings();
// settings.DtdProcessing = DtdProcessing.Prohibit;
// settings.XmlResolver = null;

// === Example: XXE attack payload (for awareness) ===
// This malicious XML attempts to read /etc/passwd:
//
// <?xml version="1.0"?>
// <!DOCTYPE data [
//   <!ENTITY xxe SYSTEM "file:///etc/passwd">
// ]>
// <data>&xxe;</data>
//
// A vulnerable parser would include file contents in output.
// A secure parser rejects the DOCTYPE declaration entirely.

// === Example: Billion Laughs payload ===
// This XML expands to ~3 GB of text from a few hundred bytes:
//
// <?xml version="1.0"?>
// <!DOCTYPE lolz [
//   <!ENTITY lol "lol">
//   <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
//   <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
//   ...
// ]>
// <data>&lol9;</data>

常见问题

将 XML 转换为 JSON 的最佳方法是什么?

最佳方法取决于您的语言和用例。JavaScript 中 fast-xml-parser 最快且可配置性最强。Python 中 xmltodict 提供最简单的 API。命令行使用 xq(yq 包的一部分)。快速一次性转换可使用在线 XML 到 JSON 转换工具。所有情况下都要确保 XML 解析器有安全配置。

XML 属性在 JSON 转换中如何处理?

由于 JSON 没有属性概念,XML 属性使用命名约定映射为 JSON 属性。最常见的约定是在属性名前加 @(如 @id、@class)。当元素同时有属性和文本内容时,文本存储在 #text 键中。

XML 到 JSON 转换安全吗?XXE 攻击怎么办?

如果配置不当,XML 解析可能很危险。最大的风险是 XXE 攻击。安全转换的方法:禁用外部实体处理,使用 Python 的 defusedxml 等安全库,在 Java 中设置 FEATURE_SECURE_PROCESSING,不需要时禁用 DTD 处理。

XML 到 JSON 转换是现代开发者的基本数据转换技能。无论您是迁移 SOAP API、处理 XML 源,还是构建数据管道,理解转换的细微差别有助于处理边缘情况和避免常见陷阱。使用我们的免费在线工具进行快速转换,处理不受信任的 XML 时遵循上述安全最佳实践。

使用我们的免费在线工具即时将 XML 转换为 JSON。 | XML Formatter | JSON Formatter

𝕏 Twitterin LinkedIn
这篇文章有帮助吗?

保持更新

获取每周开发技巧和新工具通知。

无垃圾邮件,随时退订。

试试这些相关工具

XJXML to JSON Converter<>XML Formatter{ }JSON FormatterY{}JSON ↔ YAML Converter

相关文章

XML vs JSON:何时使用哪个 — 开发者完整对比

XML 和 JSON 的全面数据交换对比。语法、解析、大小、可读性、Schema 验证和各格式的实际使用场景。

JSON 格式化与验证:在线美化、修复 JSON 完全指南

免费在线 JSON 格式化和验证工具。美化 JSON、查找语法错误,附 JavaScript 和 Python 代码示例。

YAML 转 JSON 转换器完全指南:含代码示例

免费在线 YAML 转 JSON 转换器。学习 YAML 语法,在 YAML 和 JSON 之间转换,含 JavaScript、Python、Go、Bash 代码示例。