我已经在维基百科和谷歌上搜索了它,并阅读了官方文档,但我仍然没有真正理解JSON是什么,以及我为什么要使用它。

我已经使用PHP、MySQL和JavaScript / HTML构建了一段时间的应用程序,如果JSON可以让我的生活更轻松,或者让我的代码更好,或者让我的用户界面更好,那么我想知道它。谁能给我一个简洁的解释?


当前回答

尝试下面的代码来解析你的php json响应: read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>

其他回答

JSON (JavaScript对象表示法)是一种用于数据交换的轻量级格式。它基于JavaScript语言的一个子集(在JavaScript中构建对象的方式)。正如MDN中所述,有些JavaScript不是JSON,有些JSON也不是JavaScript。

使用这种方法的一个例子是web服务响应。在过去,web服务使用XML作为传输回数据的主要数据格式,但自从JSON出现以来(JSON格式由Douglas Crockford在RFC 4627中指定),它已经成为首选格式,因为它更轻量级

您可以在官方JSON网站上找到更多信息。

JSON构建在两个结构上:

名称/值对的集合。在各种语言中,这可以实现为对象、记录、结构、字典、散列表、键控列表或关联数组。 一个有序的值列表。在大多数语言中,这是通过数组、向量、列表或序列来实现的。


JSON结构











下面是一个JSON数据的例子:

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

JavaScript JSON

JSON(在Javascript中)是一个字符串!

人们通常认为所有Javascript对象都是JSON,并且JSON是Javascript对象。这是不正确的。

在Javascript中var x = {x:y}不是JSON,这是一个Javascript对象。这两者不是一回事。JSON的等效值(用Javascript语言表示)是var x = '{"x":"y"}'。X是一个字符串类型的对象,而不是它本身的对象。要把它变成一个完全成熟的Javascript对象,你必须首先解析它,var x = JSON.parse('{"x":"y"}');, x现在是一个对象,但这不再是JSON。

参见Javascript对象Vs JSON


当使用JSON和JavaScript时,你可能会尝试使用eval函数来计算回调返回的结果,但不建议这样做,因为在JSON中有两个字符(U+2028和U+2029)有效,而在JavaScript中无效(在这里阅读更多)。

因此,在计算JSON之前,必须总是尝试使用Crockford的脚本来检查有效的JSON。在这里可以找到脚本解释的链接,这里是到js文件的直接链接。现在每个主流浏览器都有自己的实现。

关于如何使用JSON解析器的例子(使用上面代码片段中的JSON):

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

JSON解析器还提供了另一种非常有用的方法stringify。该方法接受一个JavaScript对象作为参数,并输出一个JSON格式的字符串。当你想将数据发送回服务器时,这很有用:

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

上面的两个方法(parse和stringify)还带有第二个参数,这是一个函数,将在最终结果的每个级别上为每个键和值调用,每个值将被输入函数的结果替换。(更多信息请点击这里)

顺便说一句,对于那些认为JSON只是用于JavaScript的人来说,看看这篇文章,它解释并证实了这一点。


参考文献

JSON.org 维基百科 Json在3分钟内(谢谢mson) 在Yahoo!Web服务(感谢gljivar) JSON到CSV转换器 替代JSON到CSV转换器 JSON Lint (JSON验证器)

我喜欢JSON主要是因为它非常简洁。对于可以被gzip压缩的web内容来说,这并不是什么大问题(这就是xhtml如此流行的原因)。但在某些情况下,这是有益的。

例如,在一个项目中,我正在传输需要序列化并通过XMPP传输的信息。由于大多数服务器都会限制您在单个消息中传输的数据量,因此我发现使用JSON比使用XML更有帮助。

作为一个额外的好处,如果你熟悉Python或Javascript,你已经非常了解JSON,并且不需要太多训练就可以解释它。

有时,在不需要技术细节的地方会给出技术细节,虽然许多投票最多的答案都是准确的技术和具体的,但我个人认为它们并不比维基百科或官方文件上的答案更容易理解或简洁。

我认为JSON就是它的本质——不同语言世界中的一种语言。然而,JSON与其他语言之间的区别在于,“每个人”都会“说”JSON以及他们的“母语”。

用一个真实的例子,让我们假设有三个人。其中一人将伊博语作为他们的母语。第二个人想要与第一个人互动,然而,第一个人把约鲁巴语作为他们的第一语言。

我们能做什么?

值得庆幸的是,我们例子中的第三个人是说英语长大的,但碰巧也会说伊博语和约鲁巴语作为第二语言,因此可以充当前两个人之间的中介。

在编程世界里,第一个“人”是Python,第二个“人”是Ruby,第三个“人”是JSON,他恰好能够将Ruby“翻译”成Python,反之亦然!显然,这个类比并不完美,但是,作为一个会说两种语言的人,我相信这是一种观察JSON如何与其他编程语言交互的简单方法。

简而言之,它是一种用于传递数据的脚本符号。在某些方面,它是XML的替代方案,本机支持基本数据类型、数组和关联数组(名称-值对,称为对象,因为这是它们所表示的内容)。

该语法用于JavaScript, JSON本身代表“JavaScript对象表示法”。然而,它已经变得可移植,并在其他语言中使用。

这里有一个有用的详细链接:

http://secretgeek.net/json_3mins.asp

我们要做一个关于大学的项目,我们面临一个非常大的问题,叫做同源政策。此外,它使得Javascript中的XMLHttpRequest方法不能向站点所在域以外的域发出请求。

例如,如果你的网站在www.example.com上,你就不能向www.otherexample.com发出请求。JSONRequest允许这样做,但是如果站点允许,您将得到JSON格式的结果(例如,它有一个以JSON返回消息的web服务)。 这是一个可以使用JSON的问题。

这里有一些实用的东西:Yahoo JSON