2015-01-11 55 views
0

我已經做了很多關於JSON是什麼以及它如何在網絡上使用的谷歌搜索。我明白這是一種使用JavaScript對象表示法存儲數據的方式,它是一種輕量級存儲數據的方式,因此優於XML。如何將XML和JSON與SQL結合使用?

但是,我不太清楚XML和JSON是如何用來傳輸數據的,特別是在使用SQL時。將SQL數據加載到XML文件/ JSON字符串中,然後使用Ajax顯示?

我知道這是一個完整的新手問題,但我很困惑。

回答

1

XML和JSON是序列化格式。它們是純文本格式,允許您表達純文本以外的內容。 JSON可以表示數組和鍵值對象的複雜嵌套層次結構,而XML可以表示更復雜的對象 - 屬性 - 值 - 內容層次結構。兩種數據格式都允許您以定義的方式發送比一個簡單字符串更多的數據。

從更實際的角度來看,您會如何發送三個項目從A到B?您可以輕鬆發送「foo」,這只是一個字符串。但是,「富」,「酒吧」和「巴茲」呢?你想發明自己的序列化格式嗎?像:

foo,bar,baz 

那麼你是在其他方面的一些字符串處理由,分裂,讓您的三個要素回來?如果您需要發送更復雜的數據會怎麼樣?如果您的數據包含「,」會怎麼樣?這就是現有的序列化標準,比如JSON和XML。你不需要從頭每次回答所有這些問題,你只需要使用一個現有的,以及支持的標準:

["foo","bar","baz"] 

或:

<data> 
    <item>foo</item> 
    <item>bar</item> 
    <item>baz</item> 
</data> 

你會即時產生因該數據需要;一個數據庫可能是這個數據的一個可能的來源。你不會「把它放在一個文件中」,你可以根據需要輸出它。僞代碼示例:

var data = [] 
while (row = fetch_from_database()) 
    data.push(row.name) 
var json = json_encode(data) 
print json 

在這裏,我們創建一個數組data與數據庫的name列的內容,然後將其編碼爲JSON和輸出。輸出結果類似於上面的「foo」,「bar」,「baz」示例。

+0

好了,你將存儲XML或JSON數據作爲一個MySQL數據庫中的一個條目,而不是在你的餐桌,每創造一列你想存儲的單件數據?就像我將數據存儲在博客應用程序的mysql表中一樣,並且我知道我從不想單獨在數據庫中搜索帖子標題和內容,我可以使用json或xml來存儲標題和內容在同一個字符串中? –

+0

Uhm ... * jein * ...在關係數據庫中存儲XML或JSON通常是一個壞主意。是的,它可以完成,是的,有時它是有道理的。但不,它不應該是你的第一本能。以最有意義的方式將數據存儲在數據庫中,並且最適合關係數據庫。如果您想通過AJAX將數據從數據庫中轉移到Javascript中,或者通過RESTful API將數據從數據庫中轉移到任何其他系統中,那麼您將其打包爲JSON或XML,以便通過線路發送。 – deceze

+0

因此,如果您要使用AJAX更新SQL數據庫中的數據,然後動態更新HTML,則發送請求的PHP文件會將數據從SQL格式格式化爲JSON,然後將其發回? –

0

您可以將JSON和XML視爲對象被寫下來的方式。比如說,我會給你一些隨機的書,我會請你向我描述一下這本書的構成,你會怎麼說?

也許,您應該將該書的標題,作者,出版商和其他特徵命名爲該書。所以實質上,你所做的是用語言向我描述JSON或XML在其語法中的作用。 JSON和XML是表示對象的方式。

SQL是一種邏輯存儲和搜索信息的方式。一個SQL數據庫可能包含對象,使用SQL可以搜索,存儲和檢索(等)這些對象。

Ajax是一種傳輸信息的手段(異步)。藉助Ajax,您可以在系統/應用程序之間傳輸對象的信息(例如JSON或XML對象)。

0

SQL用於存儲數據。XML和JSON是人類可讀的基於文本的數據傳輸協議。

通常通過HTTP或AJAX進行請求。接收請求的應用程序從SQL數據庫中檢索數據。所請求的數據格式化爲XML或JSON,然後作爲響應發送給請求者。

XML和JSON可以包含數據庫的所有元素。 XML的最初目的是在具有不同數據存儲的兩個系統之間傳輸數據。 JSON是作爲XML的簡化替代而創建的。 JSON是以鍵值對爲導向的,其中數據庫列名是鍵,存儲在該列中的數據是與鍵關聯的值。

例如Google Geo Coding提供了將其響應格式設置爲JSON或XML的選項。

XML /地理編碼/ XML/

$data = @file_get_contents(http://maps.googleapis.com/maps/api/geocode/xml?address=1234+Main+St&sensor=false); 

這將創建一個非常簡單的XML響應。
從XML響應得到緯度:

$xmldecode = new SimpleXMLElement($data); 
$coordinates = $googlexml - > Response - > Placemark - > Point - > coordinates; 
$coordinates = split(",", $coordinates); 
$lat = $coordinates[1]; 

JSON /地理編碼/ JSON/

$data = @file_get_contents(http://maps.googleapis.com/maps/api/geocode/json?address=1234+Main+St&sensor=false); 

從JSON響應得到緯度:

$json = json_decode($data,true); 
    $lat = $json['results']['0']['geometry']['location']['lat']; 

SQL rec ORD可以轉換成JSON
示例MySQL導出到JSON

{"number": 9547839995, 
"TimeStamp": "2014-10-09 21:38:10", 
"ip": "", 
"business": "Creative R Us Computer & Phone Repair", 
"addr": "547 E Sample Rd", 
"city": "Pompano Beach, 
    FL 33064", 
"email": "", 
"exp": "", 
"web": "http://www.creativerus.com", 
"name": "", 
"note": ""}] 

現在的XML MySQL的出口提供了很多詳細信息。
示例MySQL導出到XML

<pma_xml_export version="1.0" xmlns:pma="http://www.phpmyadmin.net/some_doc_url/"> 
    <!-- 
    - Structure schemas 
    --> 
    <pma:structure_schemas> 
     <pma:database name="isl_contact" collation="latin1_swedish_ci" charset="latin1"> 
      <pma:table name="Profile"> 
       CREATE TABLE `Profile` (
        `number` bigint(20) NOT NULL DEFAULT '0', 
        `TimeStamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
        `ip` char(16) COLLATE utf8_bin NOT NULL, 
        `business` char(64) COLLATE utf8_bin DEFAULT '', 
        `addr` char(64) COLLATE utf8_bin DEFAULT '', 
        `city` char(64) COLLATE utf8_bin DEFAULT '', 
        `email` char(128) COLLATE utf8_bin NOT NULL, 
        `exp` char(16) COLLATE utf8_bin DEFAULT '', 
        `web` char(128) COLLATE utf8_bin DEFAULT NULL, 
        `name` char(32) COLLATE utf8_bin DEFAULT '', 
        `note` varchar(256) COLLATE utf8_bin NOT NULL, 
        PRIMARY KEY (`id`), 
        KEY `NUMBER` (`ip`,`state`) 
       ) ENGINE=MyISAM AUTO_INCREMENT=369 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 
      </pma:table> 
     </pma:database> 
    </pma:structure_schemas> 

    <!-- 
    - Database: 'isl_contact' 
    --> 
    <database name="isl_contact"> 
     <!-- Table Profile --> 
     <table name="Profile"> 
      <column name="number">9545555555</column> 
      <column name="TimeStamp">2014-10-09 21:38:10</column> 
      <column name="ip"></column> 
      <column name="business">Creative R Us Computer</column> 
      <column name="addr">547 E Sample Rd</column> 
      <column name="city">Pompano Beach, FL 33064</column> 
      <column name="email"></column> 
      <column name="exp"></column> 
      <column name="web">http://www.creativerus.com</column> 
      <column name="name"></column> 
      <column name="note"></column> 
      <column name="link"></column> 
      <column name="contact"></column> 
      <column name="source"></column> 
      <column name="id">1</column> 
      <column name="mobile"></column> 
      <column name="state">3</column> 
      <column name="attributes">0</column> 
      <column name="fuDate">NULL</column> 
      <column name="fuTime">NULL</column> 
     </table> 
    </database> 
</pma_xml_export> 

[http://php.net/manual/en/xml.examples.php][1]