2010-11-16 52 views
0

我有一個服務器應用程序,我用C++重寫,這用於使用XML將數據發送到客戶端/從客戶端。我發現實現XML真的很痛苦,甚至使用現有的庫。看起來它有時候會違反直覺,我用過的C++庫似乎太複雜了。XML替換

我想知道是否有人知道任何更好的方式將數據從客戶端發送到服務器,然後以更簡單,更直觀的方式返回,然後解析XML。數據主要由基本類型組成。

我在想也許只是使用一個結構與所需的數據類型,只是通過原始套接字發送它。

我浪費了這麼多時間,這是不真實的。

回答

3

我會嘗試使用JSON或Google的協議緩衝區來查看它們是否適合您。

+0

這給出了協議緩衝區與DBus的比較http://lists.freedesktop.org/archives/dbus/2009-September/011786。html – CashCow 2010-11-17 15:18:53

2

我會將DBus視爲協議,因爲它非常標準。

7

由於duffymo表示,JSON非常適合您要做的事情。爲了增加他的答案,它在許多語言中都有健康的表示(我知道XML也是,但這裏的重點在於OP發現XML是簡單數據類型的一種痛苦)。

你可以在http://www.json.org/找到更多關於JSON的信息。在這個頁面的底部是各種語言實現的鏈接(包括C++,例如:http://sourceforge.net/projects/jsoncpp/)。

簡而言之,JSON代表JavaScript Object Notation,是描述對象的簡單方法。一個地址可以通過以下方式respresented:

{ 
    "address1" : "5, The Green", 
    "address2" : "Some Street", 
    "town"  : "JsonVille" 
} 

陣列的支持:

{ 
    "address1" : "5, The Green", 
    "address2" : "Some Street", 
    "town"  : "JsonVille" 
    "occupants": ["olivia", "newton", "john"] 
} 

和更復雜的對象:

{ 
    "address1" : "5, The Green", 
    "address2" : "Some Street", 
    "town"  : "JsonVille" 
    "occupants": [{"name" : "Olivia", 
        "age" : 24 
       },{"name" : "Newton", 
        "age" : 32 
       },{"name" : "John", 
        "age" : 42} 
       ] 
} 

編輯:語法錯誤:)

+1

我發現JSon在所有點上都贏得了XML。它真的很容易讀/寫,因爲沒有json實體可以說,它非常簡潔(標籤沒有冗餘),這要歸功於其精簡的語法。 – 2010-11-16 13:26:15

0

有一些取決於你的需求是什麼。

顯然,面向性能的網絡數據傳遞的更好選擇可能是Google Protobuf。然而這顯然不容易比其他任何替代使用我給你,因爲它明確提出要高效,而不是人類可讀等

對於人類可讀的數據,有:

  • JSON
  • YAML(alsmot所有的語言至少有一個解析器實現)由升壓提供
  • INFO格式:: property_tree
+0

我不會說協議緩衝區_clearly_不那麼容易使用。我認爲你得到自定義生成的類通常使它更容易使用。此外,協議緩衝區庫還支持等效的文本格式(如果需要,您可以使用它來實際通信,或者僅用於調試目的)。 – 2011-04-04 07:34:03

+0

我正在比較使用這種需要代碼生成的低級工具,與人類可讀的文本格式相比。但我同意。 – Klaim 2011-04-04 11:52:21

0

如果你正在做的是通過網絡發送的數據 - 您實際上不需要可編輯的文本表示形式,如XML或JSON,然後查看boost :: serialization。