検索
ホームページバックエンド開発XML/RSS チュートリアルXML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介

JOSN简介

在本系列的第一篇已经简单比较了XML和JSON 时光机

JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。

什么是 JSON?

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更易理解

JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。

JSON格式化

尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的解析伤透了脑筋,无论是服务器端生成或处理 XML,还是客户端用 JavaScript 解析 XML,都常常导致复杂的代码,极低的开发效率。实际上,对于大多数 Web 应用来说,他们根本不需要复杂的 XML 来传输数据,XML 的扩展性很少具有优势,许多 AJAX 应用甚至直接返回 HTML 片段来构建动态 Web 页面。和返回 XML 并解析它相比,返回 HTML 片段大大降低了系统的复杂性,但同时缺少了一定的灵活性

XML2JOSN

借助第三方类库转换 

XML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介

使用NuGet添加第三方类库

XML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介

<code>string xml = @"<?xml version=&#39;1.0&#39; standalone=&#39;no&#39;?>
<root>
<person id=&#39;1&#39;>
<name>Alan</name>
<url>http://www.google.com</url>
</person>
<person id=&#39;2&#39;>
<name>Louis</name>
<url>http://www.yahoo.com</url>
</person>
</root>";
 
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
 
string jsonText = JsonConvert.SerializeXmlNode(doc);
//{
//  "?xml": {
//    "@version": "1.0",
//    "@standalone": "no"
//  },
//  "root": {
//    "person": [
//      {
//        "@id": "1",
//        "name": "Alan",
//        "url": "http://www.google.com"
//      },
//      {
//        "@id": "2",
//        "name": "Louis",
//        "url": "http://www.yahoo.com"
//      }
//    ]
//  }
//}</code>

XML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介

对于每个表标签的属性对应JSON中的"@"标签名
如果有多个同名标签就会添加到一个数组集合中

其他方式转换

1.使用.NET Framework中的JavaScriptSerializer类

首先需要确保你的工程或服务器支持.NET 4.0或以上版本的Framework,否则无法找到该类。
通过JavaScriptSerializer来实现。它的名字空间为:System.Web.Script.Serialization
如果要使用它,还须添加
System.Web.Extensions库文件引用

<code>  var xml =
                   @"<Columns>
          <Column Name=""key1"" DataType=""Boolean"">True</Column>
          <Column Name=""key2"" DataType=""String"">Hello World</Column>
          <Column Name=""key3"" DataType=""Integer"">999</Column>
        </Columns>";
            var dic = XDocument
                .Parse(xml)
                .Descendants("Column")
                .ToDictionary(
                    c => c.Attribute("Name").Value,
                    c => c.Value
                );
            var json = new JavaScriptSerializer().Serialize(dic);
            Console.WriteLine(json);</code>

XML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介

2.手动编写转换类

<code>  public class Xml2JSON
    {
        public static string XmlToJSON(XmlDocument xmlDoc)
        {
            StringBuilder sbJSON = new StringBuilder();
            sbJSON.Append("{ ");
            XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, true);
            sbJSON.Append("}");
            return sbJSON.ToString();
        }
 
        //  XmlToJSONnode:  Output an XmlElement, possibly as part of a higher array
        private static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName)
        {
            if (showNodeName)
                sbJSON.Append("\"" + SafeJSON(node.Name) + "\": ");
            sbJSON.Append("{");
            // Build a sorted list of key-value pairs
            //  where   key is case-sensitive nodeName
            //          value is an ArrayList of string or XmlElement
            //  so that we know whether the nodeName is an array or not.
            SortedList childNodeNames = new SortedList();
 
            //  Add in all node attributes
            if (node.Attributes != null)
                foreach (XmlAttribute attr in node.Attributes)
                    StoreChildNode(childNodeNames, attr.Name, attr.InnerText);
 
            //  Add in all nodes
            foreach (XmlNode cnode in node.ChildNodes)
            {
                if (cnode is XmlText)
                    StoreChildNode(childNodeNames, "value", cnode.InnerText);
                else if (cnode is XmlElement)
                    StoreChildNode(childNodeNames, cnode.Name, cnode);
            }
 
            // Now output all stored info
            foreach (string childname in childNodeNames.Keys)
            {
                ArrayList alChild = (ArrayList)childNodeNames[childname];
                if (alChild.Count == 1)
                    OutputNode(childname, alChild[0], sbJSON, true);
                else
                {
                    sbJSON.Append(" \"" + SafeJSON(childname) + "\": [ ");
                    foreach (object Child in alChild)
                        OutputNode(childname, Child, sbJSON, false);
                    sbJSON.Remove(sbJSON.Length - 2, 2);
                    sbJSON.Append(" ], ");
                }
            }
            sbJSON.Remove(sbJSON.Length - 2, 2);
            sbJSON.Append(" }");
        }
 
        //  StoreChildNode: Store data associated with each nodeName
        //                  so that we know whether the nodeName is an array or not.
        private static void StoreChildNode(SortedList childNodeNames, string nodeName, object nodeValue)
        {
            // Pre-process contraction of XmlElement-s
            if (nodeValue is XmlElement)
            {
                // Convert  <aa></aa> into "aa":null
                //          <aa>xx</aa> into "aa":"xx"
                XmlNode cnode = (XmlNode)nodeValue;
                if (cnode.Attributes.Count == 0)
                {
                    XmlNodeList children = cnode.ChildNodes;
                    if (children.Count == 0)
                        nodeValue = null;
                    else if (children.Count == 1 && (children[0] is XmlText))
                        nodeValue = ((XmlText)(children[0])).InnerText;
                }
            }
            // Add nodeValue to ArrayList associated with each nodeName
            // If nodeName doesn&#39;t exist then add it
            object oValuesAL = childNodeNames[nodeName];
            ArrayList ValuesAL;
            if (oValuesAL == null)
            {
                ValuesAL = new ArrayList();
                childNodeNames[nodeName] = ValuesAL;
            }
            else
                ValuesAL = (ArrayList)oValuesAL;
            ValuesAL.Add(nodeValue);
        }
 
        private static void OutputNode(string childname, object alChild, StringBuilder sbJSON, bool showNodeName)
        {
            if (alChild == null)
            {
                if (showNodeName)
                    sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
                sbJSON.Append("null");
            }
            else if (alChild is string)
            {
                if (showNodeName)
                    sbJSON.Append("\"" + SafeJSON(childname) + "\": ");
                string sChild = (string)alChild;
                sChild = sChild.Trim();
                sbJSON.Append("\"" + SafeJSON(sChild) + "\"");
            }
            else
                XmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName);
            sbJSON.Append(", ");
        }
 
        // Make a string safe for JSON
        private static string SafeJSON(string sIn)
        {
            StringBuilder sbOut = new StringBuilder(sIn.Length);
            foreach (char ch in sIn)
            {
                if (Char.IsControl(ch) || ch == &#39;\&#39;&#39;)
                {
                    int ich = (int)ch;
                    sbOut.Append(@"\u" + ich.ToString("x4"));
                    continue;
                }
                else if (ch == &#39;\"&#39; || ch == &#39;\\&#39; || ch == &#39;/&#39;)
                {
                    sbOut.Append(&#39;\\&#39;);
                }
                sbOut.Append(ch);
            }
            return sbOut.ToString();
        }
    }</code>

XML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介

JOSN2XML

借助第三方类库转换

XML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介

<code>string json = @"{
   &#39;?xml&#39;: {
     &#39;@version&#39;: &#39;1.0&#39;,
     &#39;@standalone&#39;: &#39;no&#39;
   },
   &#39;root&#39;: {
     &#39;person&#39;: [
       {
         &#39;@id&#39;: &#39;1&#39;,
        &#39;name&#39;: &#39;Alan&#39;,
        &#39;url&#39;: &#39;http://www.google.com&#39;
      },
      {
        &#39;@id&#39;: &#39;2&#39;,
        &#39;name&#39;: &#39;Louis&#39;,
        &#39;url&#39;: &#39;http://www.yahoo.com&#39;
      }
    ]
  }
}";
 
XmlDocument doc = JsonConvert.DeserializeXmlNode(json);
doc.Save(@"D:\json.xml");
// <?xml version="1.0" standalone="no"?>
// <root>
//   <person id="1">
//     <name>Alan</name>
//     <url>http://www.google.com</url>
//   </person>
//   <person id="2">
//     <name>Louis</name>
//     <url>http://www.yahoo.com</url>
//   </person>
// </root></code>

其他方式转换

XML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介

以上がXML と JSON (グラフィックスとテキスト) 間の変換の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
整形式のXMLのマスター:データ交換のベストプラクティス整形式のXMLのマスター:データ交換のベストプラクティスMay 14, 2025 am 12:05 AM

十分に形成されたxmliscialfordataexchange cuseSuressurescorrecting andunderStundingsystems.1)startwithadeclarationlike.2)everyopeningtaghasaclosingSeclisementsemementSemementsemementsemementsed.3)useattributecreutecreutecrutecriouseinquotesinquotesiodioidin

XML:まだ使用されていますか?XML:まだ使用されていますか?May 13, 2025 pm 03:13 PM

xmlisstilluseddueToitsStructurednature、andReadability、およびwidedoptionIninterpriseenvironments.1)itfacilitatesDataexchangeIncectorsectorsectorsectorsectorsectorsectorsectorsectorsectorsectorsecraince(swift)andhealthcare(hl7).2)ithuman-readabadaTainsiadinusedinusedinusepridinusedinedisiontainsectionsectionsectionsiadinusedinitinitinitinitinitinitinit.3)

RSSドキュメントの解剖学:構造と要素RSSドキュメントの解剖学:構造と要素May 10, 2025 am 12:23 AM

RSSドキュメントの構造には、3つの主要な要素が含まれています。1。:rOSSバージョンの定義。 2。:タイトル、リンク、説明などのチャネル情報を含む。 3。:タイトル、リンク、説明などを含む特定のコンテンツエントリを表す

RSSドキュメントの理解:包括的なガイドRSSドキュメントの理解:包括的なガイドMay 09, 2025 am 12:15 AM

RSSドキュメントは、XMLファイルを介してコンテンツの更新を公開するための簡単なサブスクリプションメカニズムです。 1. RSSドキュメント構造は、要素で構成され、複数の要素が含まれています。 2。RSSリーダーを使用して、XMLを解析することにより、チャネルをサブスクライブし、情報を抽出します。 3.高度な使用には、FeedParserライブラリを使用したフィルタリングとソートが含まれます。 4.一般的なエラーには、XMLの解析とエンコードの問題が含まれます。 XML形式とエンコードをデバッグ中に検証する必要があります。 5.パフォーマンス最適化の提案には、キャッシュRSSドキュメントと非同期解析が含まれます。

RSS、XML、およびThe Modern Web:コンテンツシンジケーションディープダイビングRSS、XML、およびThe Modern Web:コンテンツシンジケーションディープダイビングMay 08, 2025 am 12:14 AM

RSSとXMLは、最新のWebで依然として重要です。 1.RSSはコンテンツを公開および配布するために使用され、ユーザーはRSSリーダーを介して購読して更新を取得できます。 2。XMLはマークアップ言語であり、データストレージと交換をサポートし、RSSファイルはXMLに基づいています。

基本を超えて:XMLによって有効になっている高度なRSS機能基本を超えて:XMLによって有効になっている高度なRSS機能May 07, 2025 am 12:12 AM

RSSにより、マルチメディアコンテンツの埋め込み、条件付きサブスクリプション、パフォーマンスとセキュリティの最適化が可能になります。 1)タグを介してオーディオやビデオなどのマルチメディアコンテンツを埋め込みました。 2)XMLネームスペースを使用して条件付きサブスクリプションを実装し、サブスクライバーが特定の条件に基づいてコンテンツをフィルタリングできるようにします。 3)CDATAセクションとXMLSchemaを介してRSSFeedのパフォーマンスとセキュリティを最適化して、標準の安定性とコンプライアンスを確保します。

RSSのデコード:Web開発者向けのXMLプライマーRSSのデコード:Web開発者向けのXMLプライマーMay 06, 2025 am 12:05 AM

RSSは、頻繁に更新されるデータを公開するために使用されるXMLベースの形式です。 Web開発者として、RSSを理解することで、コンテンツの集約と自動化の更新機能を改善できます。 RSS構造、解析、および生成方法を学習することにより、RSSFeedsを自信を持って処理し、Web開発スキルを最適化できるようになります。

JSON対XML:RSSがXMLを選択した理由JSON対XML:RSSがXMLを選択した理由May 05, 2025 am 12:01 AM

RSSは、JSONの代わりにXMLを選択しました。1)XMLの構造と検証機能は、RSS複雑なデータ構造のニーズに適したJSONよりも優れています。 2)その時点でXMLは広くサポートされていました。 3)RSSの初期バージョンはXMLに基づいており、標準になっています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール