我查看了Wikipedia并对其进行了Google搜索,并阅读了官方文档,但我仍然无法真正理解JSON是什么以及为什么要使用它。

我使用PHP,MySQL和Javascript / HTML构建应用程序已有一段时间了,如果JSON可以使我的生活更轻松,代码更好,用户界面更好,那么我想了解一下。 有人可以给我一个简洁的解释吗?


#1楼

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

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


#2楼

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'});

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

因此,下面的这一行是使用JSON进行操作的方式(只是一种简单的定义方式)

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

#3楼

什么是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对象表示法语法:

数据以名称/值对的形式数据用逗号分隔括号大括号容纳对象方括号容纳数组


#4楼

JSON(Javascript对象表示法)是一种轻量级的数据格式,用于数据交换/传输。 它的键值对与JavaScript相同。 对于REST API,它广泛用于从服务器到客户端的数据传输。 如今,许多社交媒体网站都在使用此功能。 尽管就数据类型而言,我认为这不如XML健壮。 XML具有非常丰富的数据类型和XSD。 JSON有点不足。

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


#5楼

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

使用此示例的一个示例是Web服务响应。 在过去,Web服务使用XML作为传输回传数据的主要数据格式,但是自从JSON出现以来( Douglas Crockford在RFC 4627中指定了JSON格式 ),它就成为首选格式,因为它具有更多的优势。 轻巧的

您可以在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对象与JSON


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

因此,必须始终尝试使用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}

上面的两个方法( parsestringify )还采用了第二个参数,该参数将在最终结果的每个级别上为每个键和值调用,并且每个值将由您输入的函数的结果替换。 (更多关于这里 )

顺便说一句,对于所有认为JSON仅适用于JavaScript的人,请查看这篇说明并以其他方式确认的文章。


参考文献

  • JSON.org
  • 维基百科
  • 杰森 ( Json)在3分钟内 (感谢mson )
  • 将JSON与Yahoo!一起使用 Web服务 (感谢gljivar )
  • JSON到CSV转换器
  • CSV转换器的替代JSON
  • JSON Lint(JSON验证器)

#6楼

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


#7楼

简短的常见答案是:如果使用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

#8楼

我们必须在大学里做一个项目,我们遇到了一个非常大的问题,这就是“同源起源政策”。 另外,它使Javascript中的XMLHttpRequest方法无法向除您网站所在域之外的域发出请求。

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

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


#9楼

简而言之-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序列化和反序列化对象。


#10楼

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

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

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

http://secretgeek.net/json_3mins.asp


#11楼

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

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

另外,如果您熟悉Python或Javascript,就已经非常了解JSON,并且无需任何培训就可以解释它。


#12楼

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

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

我: “基本上,这是一种与他人进行书面交流的方式。

妻子:是的...?

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

•示例1:我们一家有4个人:您,我和2个孩子。

•示例2:我们的家庭:您,我,kid1和kid2。

•示例3:家庭:[您,我,kid1,kid2]

•示例4:我们一家有4个人:妈妈,爸爸,kid1和kid2。

妻子:为什么不只使用普通英语呢?

我:他们会的,但是请记住我们正在处理计算机。 电脑很笨,无法理解句子。 因此,当涉及到计算机时,我们必须特别明确,否则它们会造成混乱。 此外,JSON是一种相当有效的通信方式,因此大部分无关的内容都被删去了,这很简单。 如果您想通过计算机与我们的家人交流,您可以采用以下一种方式:

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

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

妻子:那我该怎么写杰森?

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

摘要

JSON基本上是一种非常非常具体的规则,用于与某人通信数据的方式。 使用键值对和数组。 这是解释的概念,在这一点上值得阅读上面的特定规则。


#13楼

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

<scriptsrc="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"}]';
?>

#14楼

有时,不需要的地方都提供了技术性,并且尽管许多获得最高投票的答案都是准确的技术性和特定性,但我个人认为它们不像在Wikipedia或官方文件。

我喜欢JSON的方式就是它的真正含义-一种在不同语言世界中的一种语言。 但是,JSON和其他语言之间的区别是“每个人”都“说” JSON,以及它们的“本地语言”。

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

我们能做些什么?

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

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


#15楼

在Java上下文中,可能要使用JSON的一个原因是,它为Java的序列化框架提供了一个很好的选择,而Java的序列化框架已经(历来证明)存在一些相当严重的漏洞。

约书亚·布洛赫(Joshua Bloch)在第85条“更喜欢Java序列化的替代方法”(有效的Java第三版)中对此进行了深入讨论。

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


#16楼

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

什么是JSON?我为什么要使用它?相关推荐

  1. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  2. Go 知识点(04)— 结构体字段转 json格式 tag 标签的作用

    我们知道在 Go 语言中无论是变量.常量还是函数,对于首字母大小写有不同的处理. 首字母大写,标志着该字段或者函数是能导出的,也就是可以被其它包所能访问的: 首字母小写,标志着该字段是私有的,只能在本 ...

  3. VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、

    1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...

  4. Python 标准库之 json

    1. josn 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.JSON的数据格式其实就是python里面的字典格式,里面可以包含 ...

  5. python中如何对复杂的json数据快速查找key对应的value值(使用JsonSearch包)

    前言 之前在实际的项目研发中,需要对一些复杂的json数据进行取值操作,由于json数据的层级很深,所以经常取值的代码会变成类似这样: value = data['store']['book'][0] ...

  6. 数据库里存json数据

    需求: 查询上个月每个人各个插件的总加分汇总为一个json存储到一个字段里 查询上个月每个组织机构插件的各个插件的总加分汇总为一个json存储到一个字段里 流程: 查询后返回结果是一个List集合,每 ...

  7. http传输json文件_python

    https://cloud.tencent.com/developer/article/1571365 http传输图片 https://www.cnblogs.com/jruing/p/122156 ...

  8. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  9. dataframe 转json

    20210810 字符串转换为字典的时候,如果没有引号会报找不到 这个名称 字符串类型变字典 本身含有字典的括号 列表里面本身要是字典类型 才能通过此方法 把列表转换为dataframe # 格式检查 ...

  10. Json文件解析(下

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...

最新文章

  1. .NET Core webapi 允许put请求方式配置文件
  2. Java、Android—零碎难记笔试考点(持续更新)
  3. 个人博客作业_week2
  4. Windows10家庭中文版没有本地策略选项完美解决方案
  5. linux ubuntu安装 mono,在 Ubuntu Server 上安装配置 Mono 生产环境
  6. 目标跟踪学习笔记_1(opencv中meanshift和camshift例子的应用)
  7. 一文看尽 JVM GC 调优
  8. 数据库 统计数据收集 有什么作用_《原神》荒山孤剑录2/5收集汇总 荒山孤剑录作用是什么...
  9. 基于Huffman树的CBOW模型的理解
  10. Codeforces Round #243 (Div. 1)
  11. Mac Dock截图的小技巧
  12. 【故障处理】一次RAC故障处理过程
  13. Minio纠删码与存储级别
  14. 最全36种python设计模式
  15. 2017云栖大会Tech Insight亮点大剧透
  16. ATTINY85 和 ATTINY84 与arduino的对应引脚
  17. 7月11号,大连小雨
  18. 【HDU2019多校】E - Snowy Smile (最大字段和)
  19. 为什么CMOS门电路在传输过程存在延时
  20. idea如何给main函数中的args[] 字符串数组赋值

热门文章

  1. ListView 常用属性
  2. Spark读取Hive中的数据加载为DataFrame
  3. lodop打印不显示页码_CAD上明明有图,但是打印的时候不显示怎么办?原来要这样设置...
  4. Git_Eclipse:[3]Git初始化工程
  5. kaptcha验证码组件使用简介
  6. 数据库查询速度极慢【个人工作问题解决过程记录】
  7. iPad占据平板电脑网络使用量的85%,苹果继续主宰平板市场
  8. IT市场10大技术伟人 Linux之父居首(转)
  9. js中hover事件时候的BUG以及解决方法
  10. c++ 异常处理(2)