json扫盲

JSON是JavaScriptObjectNotation的简称,是一种轻量的数据表示方法。jason格式采用key:value的方式记录数据,非常直观,比XML简洁,因而大受欢迎介绍jason格式前,先让我们看看XML格式。显然,XML得到了相当多的关注(正面和负面的评价都有),已经在Ajax应用程序中广泛使用:
<request>
<firstName>Brett</firstName>
<lastName>McLaughlin</lastName>
<email>brett@newInstance.com</email>
</request>
这里的数据与前面看到的相同,但是这一次采用XML格式。这没什么了不起的;这只是另一种数据格式,使我们能够使用XML而不是纯文本和名称/值对。本文讨论另一种数据格式,JavaScriptObjectNotation(JSON)。JSON看起来既熟悉又陌生。它提供了另一种选择,选择范围更大总是好事情。 添加JSON在使用名称/值对或XML时,实际上是使用JavaScript从应用程序中取得数据并将数据转换成另一种数据格式。在这些情况下,JavaScript在很大程度上作为一种数据操纵语言,用来移动和操纵来自Web表单的数据,并将数据转换为一种适合发送给服务器端程序的格式。但是,有时候JavaScript不仅仅作为格式化语言使用。在这些情况下,实际上使用JavaScript语言中的对象来表示数据,而不仅是将来自Web表单的数据放进请求中。在这些情况下,从JavaScript对象中提取数据,然后再将数据放进名称/值对或XML,就有点儿多此一举了。这时就合适使用JSON:JSON允许轻松地将JavaScript对象转换成可以随请求发送的数据(同步或异步都可以)。JSON并不是某种魔弹;但是,它对于某些非常特殊的情况是很好的选择。
 
JSON基础简单地说,JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从Web客户机传递给服务器端程序。这个字符串看起来有点儿古怪(稍后会看到几个示例),但是JavaScript很容易解释它,而且JSON可以表示比名称/值对更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。 简单JSON示例按照最简单的形式,可以用下面这样的JSON表示名称/值对:
{"firstName":"Brett"}
这个示例非常基本,而且实际上比等效的纯文本名称/值对占用更多的空间:
firstName=Brett
但是,当将多个名称/值对串在一起时,JSON就会体现出它的价值了。首先,可以创建包含多个名称/值对的记录,比如:
{"firstName":"Brett","lastName":"McLaughlin","email":"brett@newInstance.com"}
从语法方面来看,这与名称/值对相比并没有很大的优势,但是在这种情况下JSON更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。 值的数组当需要表示一组值时,JSON不但能够提高可读性,而且可以减少复杂性。例如,假设您希望表示一个人名列表。在XML中,需要许多开始标记和结束标记;如果使用典型的名称/值对(就像在本系列前面文章中看到的那种名称/值对),那么必须建立一种专有的数据格式,或者将键名称修改为
person1-firstName
这样的形式。如果使用JSON,就只需将多个带花括号的记录分组在一起:
{"people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"brett@newInstance.com"},
{"firstName":"Jason","lastName":"Hunter","email":"jason@servlets.com"},
{"firstName":"Elliotte","lastName":"Harold","email":"elharo@macfaq.com"}
]}
这不难理解。在这个示例中,只有一个名为
people
的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。上面的示例演示如何用括号将记录组合成一个值。当然,可以使用相同的语法表示多个值(每个值包含多个记录):
{"programmers":[
{"firstName":"Brett","lastName":"McLaughlin","email":"brett@newInstance.com"},
{"firstName":"Jason","lastName":"Hunter","email":"jason@servlets.com"},
{"firstName":"Elliotte","lastName":"Harold","email":"elharo@macfaq.com"}
],
"authors":[
{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},
{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},
{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}
],
"musicians":[
{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},
{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}
]
}
这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目(programmers、authors和musicians)之间,记录中实际的名称/值对可以不一样。JSON是完全动态的,允许在JSON结构的中间改变表示数据的方式。在处理JSON格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。
 
 
在JavaScript中使用JSON掌握了JSON格式之后,在JavaScript中使用它就很简单了。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。 将JSON数据赋值给变量例如,可以创建一个新的JavaScript变量,然后将JSON格式的数据字符串直接赋值给它:
varpeople=
{"programmers":[
{"firstName":"Brett","lastName":"McLaughlin","email":"brett@newInstance.com"},
{"firstName":"Jason","lastName":"Hunter","email":"jason@servlets.com"},
{"firstName":"Elliotte","lastName":"Harold","email":"elharo@macfaq.com"}
],
"authors":[
{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},
{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},
{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}
],
"musicians":[
{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},
{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}
]
}
这非常简单;现在
people
包含前面看到的JSON格式的数据。但是,这还不够,因为访问数据的方式似乎还不明显。 访问数据尽管看起来不明显,但是上面的长字符串实际上只是一个数组;将这个数组放进JavaScript变量之后,就可以很轻松地访问它。实际上,只需用点号表示法来表示数组元素。所以,要想访问programmers列表的第一个条目的姓氏,只需在JavaScript中使用下面这样的代码:
people.programmers[0].lastName;
注意,数组索引是从零开始的。所以,这行代码首先访问
people
变量中的数据;然后移动到称为
programmers
的条目,再移动到第一个记录(
[0]
);最后,访问
lastName
键的值。结果是字符串值“McLaughlin”。下面是使用同一变量的几个示例。
people.authors[1].genre//Valueis"fantasy"
people.musicians[3].lastName//Undefined.Thisreferstothefourthentry,
andthereisn'tone
people.programmers.[2].firstName//Valueis"Elliotte"
利用这样的语法,可以处理任何JSON格式的数据,而不需要使用任何额外的JavaScript工具包或API。 修改JSON数据正如可以用点号和括号访问数据,也可以按照同样的方式轻松地修改数据:
people.musicians[1].lastName="Rachmaninov";
在将字符串转换为JavaScript对象之后,就可以像这样修改变量中的数据。 转换回字符串当然,如果不能轻松地将对象转换回本文提到的文本格式,那么所有数据修改都没有太大的价值。在JavaScript中这种转换也很简单:
StringnewJSONtext=people.toJSONString();
这样就行了!现在就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作Ajax应用程序中的请求字符串。更重要的是,可以将任何JavaScript对象转换为JSON文本。并非只能处理原来用JSON字符串赋值的变量。为了对名为
myObject
的对象进行转换,只需执行相同形式的命令:
StringmyObjectInJSON=myObject.toJSONString();
这就是JSON与本系列讨论的其他数据格式之间最大的差异。如果使用JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用了。对于其他数据格式,需要在原始数据和格式化数据之间进行转换。即使使用DocumentObjectModel这样的API(提供了将自己的数据结构转换为文本的函数),也需要学习这个API并使用API的对象,而不是使用原生的JavaScript对象和语法。最终结论是,如果要处理大量JavaScript对象,那么JSON几乎肯定是一个好选择,这样就可以轻松地将数据转换为可以在请求中发送给服务器端程序的格式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值