【问题标题】:Why would anyone use JSON for data transferral to a Java server?为什么有人会使用 JSON 将数据传输到 Java 服务器?
【发布时间】:2016-11-27 13:39:35
【问题描述】:

对我来说,一个很大的好奇心是为什么这么多人喜欢经历创建 JSON 文件、将对象写入其中、让服务器在某处访问该文件并使用 java-json 库来读取和解析数据的麻烦当您可以选择将您发送的所有对象放入一个字符串中,该字符串通过适当的字符分隔键/值并发送服务器解析的字符串。

例如,在 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("*");
...

等等……只要你足够小心,禁止在程序的其他地方使用这些字符,你为什么要把事情复杂化到现代数据传输所做的极端?

感谢您的洞察!

【问题讨论】:

  • 嗯...也许创建一个对象更容易和更快,使用JSON.stringify() 对其进行字符串化比制作只有开发人员知道的“非标准”格式...我认为是有一个标准化的格式比让任何人以他们想要的任何方式格式化信息更好......其他开发人员更容易理解发生了什么。
  • 网页设计的一个问题是,有太多的平台可以使用,以至于开发人员经常陷入其中一些事情他们非常了解而另一些事情不太了解的情况。在这种情况下,开发人员倾向于尽可能减少学习曲线,并最终使用他们所知道的。另一方面,诸如 JSON 之类的标准在一定程度上是为了减少开发开销。如果我可以在睡梦中做你的例子,或者花两天时间确保你的替代方案没有我不熟悉的问题,我会选择你的例子。

标签: javascript java json server client


【解决方案1】:

根据我的经验,如果项目超出了我的个人用途或实验范围,我不会选择我自己的数据格式。最好使用任何人都知道(或可以很快理解)的标准,它也有很多库,并且是一种经过良好测试的格式,适用于您可能不知道可能发生的情况,从而为您节省可能的麻烦。

如果您说“让我们使用这种格式而不是这种格式”没有可靠的论据,我会选择像 JSON 这样的标准格式。

【讨论】:

    【解决方案2】:

    关于各种编码格式:

    听起来您所描述的是一种特殊的字符分隔格式。 CSV(逗号分隔值)对于在整个数据中列名相同的数据集很受欢迎。但是,如果您将数据从服务器传输到包含嵌套对象或包含列表的对象的客户端,则很难以这种方式清楚地表示这一点。

    您可以将 JSON 用于这些任务,将 CSV 用于其他任务,但是为您的整个 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 的列表格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 2013-07-24
      • 2012-04-12
      • 2022-10-04
      • 1970-01-01
      相关资源
      最近更新 更多