2016-07-23 37 views
0

對我來說,一個很大的好奇心是爲什麼很多人喜歡去創建JSON文件,編寫對象,並讓服務器訪問該文件,並使用java-json庫來讀取和解析數據時您可以將所有要發送的對象放入一個字符串中,該字符串通過適當的字符分隔鍵/值併發送服務器解析的單純的字符串。爲什麼會有人使用JSON將數據傳輸到Java服務器?

例如,在JavaScript端:

function convertToSendableString(object) { 

    if (object instanceof Array){ 
    var stringToSend = ""; 
    for (i = 0; i < object.length; i++){ 
    stringToSend += object[i] + "~"; 
    } 
    } 

    if (object instanceof Object){ 
    //Do something similar as what was done with Array but add another 
    //character to separate each key/value pair. ex. 
    //car~honda*book~dictionary*sanity~almostgone* 
    } 

return stringToSend; 
} 

client.write(convertToSendableString(someObject)); 

然後在服務器端(在這種情況下,在Java):

is = new DataInputStream(socket.getInputStream()); 
os = new DataOutputStream(socket.getOutputStream()); 
in = new BufferedReader(new InputStreamReader((DataInputStream) is)); 

String line = ""; 

       try { 
        while (in.ready()) { 
         char character = (char) in.read();  
         line = line + character; 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

String[] parts = line.split("*"); 
... 

等等......只要你請充分注意禁止在程序中的其他位置使用這些字符,爲什麼要將事情複雜到現代數據傳輸所做的極端?

感謝您的洞察!

+0

好吧......也許創建一個對象比使用JSON.stringify()更容易,更快速,而不是製作只有開發人員才知道的「非標準」格式......我認爲最好是採用標準化的格式,而不是讓任何人以任何他們想要的方式格式化信息......另一位開發人員更容易理解發生的情況。 –

+0

網頁設計中的一個問題是,有太多的平臺需要處理,開發人員經常會陷入他們非常瞭解某些事情的情況,而其他人則不太好。在這種情況下,開發人員傾向於儘可能減少學習曲線,並隨着他們所知道的結束。另一方面,像JSON這樣的標準在一定程度上可以減少開發開銷。如果我可以在睡夢中做你的榜樣,或者花兩天時間確定我的不熟悉的替代方案沒有問題,我將以你的榜樣爲例。 – BobRodes

回答

0

根據我的經驗,如果這是一個超出我個人使用或實驗範圍的項目,我不會選擇我自己的數據格式。最好使用任何人都知道(或可以很快理解)的標準,這些標準也有很多庫,對於可能會發生的情況,這是一種經過充分測試的格式,可以節省您可能會遇到的麻煩。

如果你沒有說「讓我們用這種格式代替這個」的可靠論據,我會選擇像JSON這樣的標準格式。

0

關於各種編碼格式:

聽起來像你所描述的是一種特殊的字符分隔格式。 CSV(逗號分隔值)對於列名在整個數據中相同的數據集非常流行。但是,如果您要將數據從服務器傳輸到包含嵌套對象或包含列表的對象的客戶端,則很難以這種方式清楚地表示這一點。

你可以對這些任務使用JSON,對其他人使用JSON,但是對於整個API使用一個標準系統會讓你和後來的開發人員更容易看到你的項目,因爲只有一種格式需要擔心(限制事情出錯)。

好了,所以讓我們拿出我們自己的標準:

把所有要發送到其通過適當的字符分隔的鍵/值,併發送服務器解析,僅僅字符串的字符串對象。

好了,我們開始像這樣的東西(你的例子):

car~honda*book~dictionary*sanity~almostgone* 

後來,然而,我們決定,有時我們要服務於一個響應多個對象,使用換行。

car~honda*book~dictionary*sanity~almostgone* 
car~flintstonemobile*book~thesaurus*sanity~beengoneforawhile* 

也許雖然我們應該在響應中描述名稱,每加侖英里數和車輪數量的汽車。

car~!name~honda*mpg~16*wheels~4!*book~dictionary*sanity~almostgone* 
car~!name~flintstonemobile*mpg~0*wheels~2!*book~thesaurus*sanity~beengoneforawhile* 

通過你在功能上增加了對不同的數據類型和列表的時候,你從JSON最終的東西也差不太多:

  • 〜 - >:
  • ! - > {}
  • * - >

對於比較:(雖然你需要 「」 你的字符串)

{car:{name:honda,mpg:16,wheels:4},book:dictionary,sanity:almostgone} 

最後,是的,你可以優化你的通過自定義格式的帶寬,棘手的編碼和一些數學。然而,使用諸如JSON之類的標準不僅應該讓其他程序員更易讀,而且由於JSON序列化器/解釋器過多,因此也更易於編寫代碼。

  • 還應該注意的是,所有瀏覽器在查詢參數中可能都不支持換行符,所以您必須將編碼重新調整爲更接近JSON的列表格式。
相關問題