2016-07-23 36 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的列表格式。
相关问题