首頁 後端開發 XML/RSS教程 詳細介紹XML與JSON相互轉換(圖文)

詳細介紹XML與JSON相互轉換(圖文)

Mar 22, 2017 pm 04:43 PM

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相互轉換(圖文)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

<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库文件引用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<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.手动编写转换类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

<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相互轉換(圖文)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數組轉JSON的效能最佳化方法包括:使用JSON擴充和json_encode()函數;新增JSON_UNESCAPED_UNICODE選項以避免字元轉義;使用緩衝區提高循環編碼效能;快取JSON編碼結果;考慮使用第三方JSON編碼庫。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

如何使用 PHP 函數處理 XML 資料? 如何使用 PHP 函數處理 XML 資料? May 05, 2024 am 09:15 AM

使用PHPXML函數處理XML資料:解析XML資料:simplexml_load_file()和simplexml_load_string()載入XML檔案或字串。存取XML資料:利用SimpleXML物件的屬性和方法來取得元素名稱、屬性值和子元素。修改XML資料:使用addChild()和addAttribute()方法新增元素和屬性。序列化XML資料:asXML()方法將SimpleXML物件轉換為XML字串。實戰案例:解析產品饋送XML,提取產品信息,轉換並將其儲存到資料庫中。

如何使用 PHP 函數處理 JSON 資料? 如何使用 PHP 函數處理 JSON 資料? May 04, 2024 pm 03:21 PM

PHP提供了以下函數來處理JSON資料:解析JSON資料:使用json_decode()將JSON字串轉換為PHP數組。建立JSON資料:使用json_encode()將PHP陣列或物件轉換為JSON字串。取得JSON資料的特定值:使用PHP數組函數存取特定值,例如鍵值對或陣列元素。

如何在 Golang 中將 JSON 資料保存到資料庫中? 如何在 Golang 中將 JSON 資料保存到資料庫中? Jun 06, 2024 am 11:24 AM

可以透過使用gjson函式庫或json.Unmarshal函數將JSON資料儲存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數需要一個目標類型指標來解組JSON資料。這兩種方法都需要準備SQL語句和執行插入操作來將資料持久化到資料庫中。

PHP 數組轉 JSON 的快捷技巧 PHP 數組轉 JSON 的快捷技巧 May 03, 2024 pm 06:33 PM

PHP陣列可透過json_encode()函數轉換為JSON字串(例如:$json=json_encode($array);),反之亦可用json_decode()函數從JSON轉換為陣列($array=json_decode($json);) 。其他技巧還包括:避免深度轉換、指定自訂選項以及使用第三方程式庫。

XML 解析的 Java 函式庫比較:尋找最佳解決方案 XML 解析的 Java 函式庫比較:尋找最佳解決方案 Mar 09, 2024 am 09:10 AM

簡介XML(可擴展標記語言)是一種用於儲存和傳輸資料的流行格式。在Java中解析XML是許多應用程式的必要任務,從資料交換到文件處理。為了有效地解析XML,開發人員可以使用各種Java函式庫。本文將比較一些最受歡迎的XML解析函式庫,重點放在它們的特性、功能和效能,以幫助開發人員做出明智的選擇。 DOM(文件物件模型)解析函式庫JavaXMLDOMAPI:由oracle提供的標準DOM實作。它提供了一個物件模型,允許開發人員存取和操作XML文件。 DocumentBuilderFactoryfactory=D

See all articles