ChatGPT解决这个技术问题 Extra ChatGPT

什么是 JSON,它的用途是什么?

我查看了 Wikipedia 并在 Google 上搜索并阅读了官方文档,但我仍然没有真正理解 JSON 是什么,以及我为什么要使用它。

我一直在使用 PHP、MySQL 和 JavaScript / HTML 构建应用程序,如果 JSON 可以做一些事情来让我的生活更轻松,或者我的代码更好,或者我的用户界面更好,那么我想知道它。有人可以给我一个简洁的解释吗?

JSON 是 YAML 的子集yaml.org
copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it 这是一个很好的直接使用示例
+Brad Gilbert 并非如此 - 它是表达数据的自己的方式,并且类似于 JSON,只是因为它们都将对象表达为字符串(类似于 XML 或 plists 或许多其他),但 JSON 更适合机器编写,而 YAML 更适合人类编写.

1
17 revs, 12 users 55%

JSON(JavaScript Object Notation)是一种用于数据交换的轻量级格式。它基于 JavaScript 语言的一个子集(对象在 JavaScript 中的构建方式)。如 stated in the MDN,有些 JavaScript 不是 JSON,有些 JSON 不是 JavaScript。

使用此功能的一个示例是 Web 服务响应。在“旧”时代,Web 服务使用 XML 作为回传数据的主要数据格式,但自从 JSON 出现(JSON 格式由 Douglas Crockford 在 RFC 4627 中指定)首选格式,因为它更轻量级

您可以在官方 JSON web site 上找到更多信息。

JSON 建立在两种结构之上:

名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键控列表或关联数组。

值的有序列表。在大多数语言中,这被实现为数组、向量、列表或序列。

JSON结构

https://i.stack.imgur.com/VHjrV.gif

以下是 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"}'xstring 类型的对象,而不是它自己的对象。要将其转换为完全成熟的 Javascript 对象,您必须首先对其进行解析,var x = JSON.parse('{"x":"y"}');x 现在是一个对象,但它不再是 JSON。

请参阅Javascript object Vs JSON

使用 JSON 和 JavaScript 时,您可能想使用 eval 函数来评估回调中返回的结果,但不建议这样做,因为 JSON 中有两个有效字符(U+2028 和 U+2029)但不是在 JavaScript 中(阅读此 here 的更多内容)。

因此,必须始终尝试使用 Crockford 的脚本,该脚本在评估它之前检查一个有效的 JSON。找到脚本说明的链接 here,这里是 js 文件的 direct link。现在每个主要的浏览器都有 its own implementation

关于如何使用 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}

上述两个方法(parsestringify)还带了一个第二个参数,这是一个函数,在最终结果的每一层,每个键和值都会被调用,每个值都会被你的结果替换输入函数。 (有关此 here 的更多信息)

顺便说一句,对于那些认为 JSON 仅适用于 JavaScript 的所有人,请查看 this post,它解释并确认了其他情况。

参考

JSON.org

维基百科

分钟内的 Json(感谢 mson)

在 Yahoo! 中使用 JSON Web 服务(感谢 gljivar)

JSON 到 CSV 转换器

替代 JSON 到 CSV 转换器

JSON Lint(JSON 验证器)


不管信息被序列化的方式如何,你都会有一个解析器,对吧?因此,如果要抽象出实现细节,谁会在乎您使用什么格式来传输数据。
实际上,如果您在客户端和服务器之间来回传输数据,我认为注意响应大小非常重要。
对于迂腐的人来说,JSON 处理几个字符的方式与 JavaScript 不同,因此不能成为严格的子集:timelessrepo.com/json-isnt-a-javascript-subset
当您说它比 XML 更轻量级时,您是指文件大小还是轻量级在编码中具有空间意义?
那么你会用 JSON 替换 XML 吗?你是这么说的吗?如果是这样......太好了,xml 是一场噩梦。
K
Koray Tugay

概念解释 - 没有代码或技术术语

什么是 JSON? – 我是如何向我的妻子解释的

我:“这基本上是一种以书面形式与某人交流的方式……但有非常具体的规则。

妻子:是吗……?

我:在平淡无奇的英语中,规则很宽松:就像笼子里的格斗一样。 JSON 并非如此。描述事物的方式有很多种:

• 示例1:我们家有4 口人:你、我和2 个孩子。

• 示例2:我们的家庭:你、我、kid1 和kid2。

• 示例 3:家庭:[你,我,孩子 1,孩子 2]

• 示例4:我们家有4 口人:妈妈、爸爸、孩子1 和孩子2。

妻子:他们为什么不直接用简单的英语呢?

我:他们会,但请记住我们正在处理计算机。计算机是愚蠢的,无法理解句子。因此,当涉及计算机时,我们必须非常具体,否则他们会感到困惑。此外,JSON 是一种相当有效的通信方式,因此大部分不相关的东西都被删除了,这很方便。如果您想将我们的家人与计算机通信,您可以这样做的一种方法是:

{
    "Family": ["Me", "Wife", "Kid1", "Kid2"] 
}

……这基本上是 JSON。但请记住,您必须遵守 JSON 语法规则。如果您违反了这些规则,那么计算机将根本无法理解(即解析)您正在编写的内容。

老婆:那我怎么用Json写呢?

一个好方法是使用 json 序列化器 - 这是一个为您完成繁重工作的库。

概括

JSON 基本上是一种向某人传达数据的方式,具有非常非常具体的规则。使用键值对和数组。这是解释的概念,此时值得阅读上面的具体规则。


V
Vilx-

简而言之 - JSON 是一种序列化方式,它成为 JavaScript 代码。执行时(使用 eval 或其他方式),此代码创建并返回一个 JavaScript 对象,其中包含您序列化的数据。这是可用的,因为 JavaScript 允许以下语法:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

您可以将其用于多种目的。一方面,这是一种将数据从服务器后端传递到 JavaScript 代码的舒适方式。因此,这经常在 AJAX 中使用。

您还可以将其用作独立的序列化机制,它比 XML 更简单且占用空间更少。存在许多库,允许您为各种编程语言序列化和反序列化 JSON 中的对象。


C
CashCow

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

语法是 JavaScript 中使用的语法,JSON 本身代表“JavaScript Object Notation”。然而,它已经变得可移植并且也用于其他语言。

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

http://secretgeek.net/json_3mins.asp


t
the Tin Man

JSON 格式通常用于通过网络连接序列化和传输结构化数据。它主要用于在服务器和 Web 应用程序之间传输数据,作为 XML 的替代品。


N
Nolte

JSON 是 JavaScript 对象表示法。与 XML 相比,它是一种更紧凑的跨网络连接传输数据集的方式。我建议在任何类似 AJAX 的应用程序中使用 JSON,否则 XML 将成为“推荐”选项。 XML 的冗长将增加下载时间并增加带宽消耗 ($$$)。您可以使用 JSON 实现相同的效果,它的标记几乎专门用于数据本身,而不是底层结构。


S
Steven A. Lowe

常见的简短回答是:如果您使用 AJAX 进行数据请求,您可以轻松地将对象作为 JSON 字符串发送和返回。 Javascript 的可用扩展支持所有 javascript 类型的 toJSON() 调用,以便在 AJAX 请求中将数据发送到服务器。 AJAX 响应可以将对象作为 JSON 字符串返回,可以通过简单的 eval 调用将其转换为 Javascript 对象,例如,如果 AJAX 函数 someAjaxFunctionCallReturningJson 返回

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

你可以用 Javascript 编写

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON 也可用于 Web 服务有效负载等,但对于 AJAX 结果来说真的很方便。

更新(十年后):不要这样做,使用 JSON.parse


使用 eval(),任何东西都会被评估。这是一个安全风险。
@ThomasWeller 是的,这个答案很古老,我现在会使用 JSON.parse,谢谢!
J
Jason Baker

我喜欢 JSON 主要是因为它非常简洁。对于可以 gzip 压缩的 Web 内容,这不一定是什么大问题(这就是为什么 xhtml 如此受欢迎)。但在某些情况下,这可能是有益的。

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

另外,如果您熟悉 Python 或 Javascript,那么您已经非常了解 JSON,并且无需太多培训即可解释它。


2
2 revs, 2 users 93%

什么是 JSON?

JavaScript Object Notation (JSON) 是一种轻量级的数据交换格式,其灵感来自 JavaScript 的对象文字。

JSON 值可以包括:

对象(名称-值对的集合) 数组(值的有序列表) 字符串(双引号) 数字 true、false 或 null

JSON 与语言无关。

JSON 与 PHP?

PHP 版本 5.2.0 之后,JSON 扩展默认解码和编码功能。

Json_encode - 返回值的 JSON 表示 Json_decode - 解码 JSON 字符串 Json_last_error - 返回最后发生的错误。

JSON 语法和规则?

JSON 语法源自 JavaScript 对象表示法语法:

数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组


J
Jerel

有时在不需要技术性的地方给出了技术性,虽然许多投票最多的答案都是准确的技术性和具体的,但我个人认为它们不像维基百科或在官方文档。

我喜欢考虑 JSON 的方式正是它的本质——一种不同语言世界中的语言。然而,JSON 和其他语言的区别在于“每个人”都“说”JSON,以及他们的“母语”。

使用一个真实世界的例子,让我们假设我们有三个人。一个人说伊博语作为他们的母语。第二个人想与第一个人互动,但是,第一个人说约鲁巴语作为他们的第一语言。

我们能做什么?

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

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


A
Andreas Grech

我们必须在大学做一个项目,我们面临一个非常大的问题,它被称为同源政策。 Amog 其他事情,它使您的 Javascript 中的 XMLHttpRequest 方法无法向您的站点所在域以外的域发出请求。

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

这是一些实用的东西:Yahoo JSON


G
Ganesh Vellanki

JSON 和传统语法之间的区别如下(在 Javascript 中)

传统的

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","mike.Anderson@office.com");

使用 JSON

如果我们使用 JSON,我们可以用不同的方式定义为

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

我们必须记住的重要一点是,如果我们必须在没有 JSON 方法的情况下构建具有 100 个元素的“Employee”类或模态,我们必须在创建类时解析所有内容。但是使用 JSON,我们只能在定义类的新对象时定义内联对象。

所以下面这一行是用JSON做事的方式(只是一种简单的定义方式)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

这不完全是 JSON - 它是一个 Javascript 对象(不是 JSON)
J
Jon

这很简单。 JSON 代表 Java 脚本对象表示法。将其视为使用 XML 在软件组件之间传输数据的替代方法。

例如,我最近编写了一堆返回 JSON 的 Web 服务,然后一些 Javascript 开发人员编写了调用这些服务并使用以该格式返回的信息的代码。


S
Shailendra Singh

JSON(Javascript object notation)是一种用于数据交换/传输的轻量级数据格式。它与 JavaScript 一样在键值对中。对于 REST API,它广泛用于从服务器到客户端的数据传输。如今,许多社交媒体网站都在使用它。尽管在数据类型方面我认为它不像 XML 那样健壮。 XML 具有非常丰富的数据类型和 XSD。 JSON 在这方面有点欠缺。

对于相同数量的字符串数据,JSON 将比 XML 更轻,因为 XML 具有所有的开始和结束标签,等等......


j
johnm

在 Java 环境中,可能希望使用 JSON 的一个原因是,它为 Java 的序列化框架提供了一个非常好的替代方案,该框架已被证明(历史上)存在一些相当严重的漏洞。

Joshua Bloch 在 Item 85 “Prefer Alternatives to Java Serialization”(Effective Java 3rd Edition)中深入讨论了这一点

Java 的序列化最初旨在将数据结构转换为易于传输或存储的格式。 JSON 满足这个要求,没有上面提到的严重漏洞。


a
amit rawat

尝试以下代码来解析您的 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>

服务器.php

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

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。