Json、Xml格式相互转换

1.导入依赖包

mvnrepository.com/artifact/or…

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20210307</version>
</dependency>

2.Xml转换为Json

package com.example;

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

/**
 * com.example.excel
 * Description:
 *
 * @author jack
 * @date 2021/7/5 8:18 下午
 */
public class Xml2Json {
    public static void main(String[] args) {
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" +
                "<MoBaoAccount MessageType=\"UserMobilePay\" PlatformID=\"b2ctest\">\n" +
                "  <OrderNo>M20150521084825</OrderNo>\n" +
                "  <TradeAmt>5000.00</TradeAmt>\n" +
                "  <Commission>0.5</Commission>\n" +
                "  <UserID>xiaolong</UserID>\n" +
                "  <MerchID>xiaolong1</MerchID>\n" +
                "  <tradeType>0</tradeType>\n" +
                "  <CustParam>123</CustParam>\n" +
                "  <NotifyUrl>http://mobaopay.com/callback.do</NotifyUrl>\n" +
                "  <TradeSummary>订单</TradeSummary>\n" +
                "</MoBaoAccount>";

        // XML转换为JSON
        JSONObject jsonObject = XML.toJSONObject(xml);
        System.out.println(jsonObject.toString());
    }
}

原始XML

<?xml version="1.0" encoding="utf-8" ?>
<MoBaoAccount MessageType="UserMobilePay" PlatformID="b2ctest">
  <OrderNo>M20150521084825</OrderNo>
  <TradeAmt>5000.00</TradeAmt>
  <Commission>0.5</Commission>
  <UserID>xiaolong</UserID>
  <MerchID>xiaolong1</MerchID>
  <tradeType>0</tradeType>
  <CustParam>123</CustParam>
  <NotifyUrl>http://mobaopay.com/callback.do</NotifyUrl>
  <TradeSummary>订单</TradeSummary>
</MoBaoAccount>

转换结果

{
    "MoBaoAccount":{
        "MerchID":"xiaolong1",
        "TradeSummary":"订单",
        "UserID":"xiaolong",
        "NotifyUrl":"http://mobaopay.com/callback.do",
        "PlatformID":"b2ctest",
        "Commission":0.5,
        "OrderNo":"M20150521084825",
        "TradeAmt":5000,
        "CustParam":123,
        "MessageType":"UserMobilePay",
        "tradeType":0
    }
}

3.Json转换为Xml

package com.example;

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

/**
 * com.example.excel
 * Description:
 *
 * @author jack
 * @date 2021/7/5 8:18 下午
 */
public class Json2Xml {
    public static void main(String[] args) {
        String json = "{\n" +
                "    \"MoBaoAccount\":{\n" +
                "        \"MerchID\":\"xiaolong1\",\n" +
                "        \"TradeSummary\":\"订单\",\n" +
                "        \"UserID\":\"xiaolong\",\n" +
                "        \"NotifyUrl\":\"http://mobaopay.com/callback.do\",\n" +
                "        \"PlatformID\":\"b2ctest\",\n" +
                "        \"Commission\":0.5,\n" +
                "        \"OrderNo\":\"M20150521084825\",\n" +
                "        \"TradeAmt\":5000,\n" +
                "        \"CustParam\":123,\n" +
                "        \"MessageType\":\"UserMobilePay\",\n" +
                "        \"tradeType\":0\n" +
                "    }\n" +
                "}";

        // JSON转换为XML
        JSONObject jsonObject = new JSONObject(json);
        String json2Xml = "<?xml  version=\"1.0\" encoding=\"UTF-8\" ?>\n" + XML.toString(jsonObject);
        System.out.println(json2Xml);
    }
}

原始json

{
    "MoBaoAccount":{
        "MerchID":"xiaolong1",
        "TradeSummary":"订单",
        "UserID":"xiaolong",
        "NotifyUrl":"http://mobaopay.com/callback.do",
        "PlatformID":"b2ctest",
        "Commission":0.5,
        "OrderNo":"M20150521084825",
        "TradeAmt":5000,
        "CustParam":123,
        "MessageType":"UserMobilePay",
        "tradeType":0
    }
}

转换结果

<?xml  version="1.0" encoding="UTF-8" ?>
<MoBaoAccount>
    <MerchID>xiaolong1</MerchID>
    <TradeSummary>订单</TradeSummary>
    <UserID>xiaolong</UserID>
    <NotifyUrl>http://mobaopay.com/callback.do</NotifyUrl>
    <PlatformID>b2ctest</PlatformID>
    <Commission>0.5</Commission>
    <OrderNo>M20150521084825</OrderNo>
    <TradeAmt>5000</TradeAmt>
    <CustParam>123</CustParam>
    <MessageType>UserMobilePay</MessageType>
    <tradeType>0</tradeType>
</MoBaoAccount>

最后分享一款在线XML/JSON互转 JSON格式和XML格式互转在线工具

http://xmljson.wc139.com/

<think>在用户提供的引用中,[1]提到使用JsonSchema进行XMLJSON,但未提供具体代码;[2]展示了JSON与实体类转换,与主题无关;[3]给出关键代码:使用JsonReaderWriterFactory.CreateJsonReader将JSONXML阅读器。需补充完整转换方法。 用户明确要求JSONXML相互转换,应提供双向转换方案。引用[3]的方法仅实现JSONXML的第一步,需扩展为完整转换流程。同时,需补充XMLJSON的方法。 根据.NET框架特性,JSONXML的标准做法: 1. 使用JsonReaderWriterFactory.CreateJsonReader将JSON字符串XmlDictionaryReader 2. 通过XElement.Load加载为XElement对象 3. 调用XElement.ToString输出XML字符串 XMLJSON的标准做法: 1. 使用JsonReaderWriterFactory.CreateJsonWriter创建JSON写入器 2. 结合XmlReader读取XML,将内容写入MemoryStream 3. 从流中获取JSON字符串 注意:引用中未提及XMLJSON的完整代码,需根据.NET文档补充。同时需处理常见问题如命名空间、属性转换等。 需生成相关问题帮助用户深入理解。 </think> 在 C# 中实现 JSONXML 相互转换,主要依赖 **`System.Runtime.Serialization.Json`** 命名空间中的 `JsonReaderWriterFactory` 类。以下是两种场景的完整实现方案: --- ### **1. JSONXML 转换** ```csharp using System.IO; using System.Runtime.Serialization; using System.Xml; public static string JsonToXml(string jsonString) { // 创建 XML 字典读取器 using (var reader = JsonReaderWriterFactory.CreateJsonReader( Encoding.UTF8.GetBytes(jsonString), XmlDictionaryReaderQuotas.Max)) { // 加载为 XML 文档 var xmlDoc = new XmlDocument(); xmlDoc.Load(reader); return xmlDoc.OuterXml; // 返回标准 XML 字符串 } } ``` **调用示例**: ```csharp string json = "{\"Name\":\"Alice\",\"Age\":30}"; string xml = JsonToXml(json); // 输出: <root><Name>Alice</Name><Age>30</Age></root> ``` --- ### **2. XMLJSON 转换** ```csharp using System.IO; using System.Runtime.Serialization.Json; using System.Text; public static string XmlToJson(string xmlString) { // 创建 XML 读取器 using (var reader = XmlReader.Create(new StringReader(xmlString))) { // 通过内存流捕获 JSON 输出 using (var memoryStream = new MemoryStream()) { var settings = new XmlWriterSettings { Indent = true }; using (var jsonWriter = JsonReaderWriterFactory.CreateJsonWriter( memoryStream, Encoding.UTF8, ownsStream: false, indent: true)) { // 将 XML 写入 JSON 写入器 while (reader.Read()) { jsonWriter.WriteNodees(reader); } } return Encoding.UTF8.GetString(memoryStream.ToArray()); } } } ``` **调用示例**: ```csharp string xml = "<root><Name>Bob</Name><Age>25</Age></root>"; string json = XmlToJson(xml); // 输出: {"root":{"Name":"Bob","Age":25}} ``` --- ### **关键说明** 1. **命名空间依赖** 需引用 `System.Runtime.Serialization` 和 `System.ServiceModel.Web`(.NET Framework)或直接使用 `System.Text.Json`(.NET Core 3.0+)[^3]。 2. **结构映射规则** - JSON 对象 `{ "key":value }` → XML 元素 `<key>value</key>` - JSON 数组 `["a","b"]` → XML 序列 `<item>a</item><item>b</item>` - 根节点自动命名为 `root`(可自定义) 3. **.NET Core 优化方案** 推荐使用 `System.Text.Json` 库提高性能: ```csharp // XMLJSON(.NET Core) var xmlDoc = XDocument.Parse(xmlString); return JsonSerializer.Serialize(xmlDoc); ``` --- ### **常见问题处理** | 问题类型 | 解决方案 | |-------------------|----------------------------------| | 转换格式缩进 | 调整 `XmlWriterSettings.Indent` | | 特殊字符义 | 使用 `XmlConvert.EncodeName()` | | 处理 XML 命名空间 | 在 `XmlReaderSettings` 中配置 | > 实际项目中,建议封装工具类统一处理异常和格式配置[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值