工作过程中,经常需要使用json这种轻量级的数据交换格式,例如,通过它可以组织数据保存到配置文件,客户端和服务端通过json格式来进行通信等,但是,针对特定的需求场景,需要设计怎样的json格式比较合适呢,json到底可以支持多少种格式呢,有没有一种简单的概括,就能让使用者轻松使用它呢!

一般知识都有基本的理论结构,所以,本文首先将说明json的基本知识点,然后基于开源软件jsoncpp来说明如何构建/读写json, 再分享个人的使用心得,最后再总结json的关键要点,理解了这一点,玩转json不是问题。

一、Json简介

Json是轻量级的数据交换格式,它便于阅读和编写,它是完全独立于程序语言的文本格式。

二、Json结构

Json有两个结构, 分别是“名称/值”对的集合和值的有序列表。“名称/值”对的集合可以简单理解为对象集合,而值的有序列表可以理解为数组。




jquery json解析成表单 jquery解析json数组_json数组


这里举一个“名称/值”对的集合的例子,它是以左大括号开始,以右大括号结束,中间是由多个“名称/值”对组成,各个“名称/值”对之间用逗号隔开。


jquery json解析成表单 jquery解析json数组_json 数组_02


举一个“值的有序列表”的例子,它是以左中括号开始,以右中括号结束,中间是由多个值组成,各个值之间用逗号隔开。


jquery json解析成表单 jquery解析json数组_json数组_03


三、Json形式

Json主要由三种形式,分别为对象(object), 数组(array), 值(value)。

对象(object)是“名称/值”对集合,名称与值之间通过冒号隔开,另外对象是以左大括号开始,以右大括号结束。


jquery json解析成表单 jquery解析json数组_json数组_04


数组(array)是值的有序集合,它是以左中括号开始,以右中括号结束。


jquery json解析成表单 jquery解析json数组_json 数组_05


值(value)可以是字符串(string)、数值(number)、对象(object)、数组(array)、true、false、null。这里我们会发现对象(object)里面有值(value), 数组(array)里面也有值(value), 而值(value)又包含有对象和数组,所以它们是可以嵌套的。


jquery json解析成表单 jquery解析json数组_jquery json解析成表单_06


Json就是由上面简单的元素来组建复杂的信息元素。

四、Json例子

jsoncpp是C++语言编写的开源json库,通过该库,我们可以很容易的构建、读写json。接下来就基于jsoncpp来实现几个构建、读取json的例子。通过例子可以对json有更深的理解。jsoncpp最基本的对象就是Json::Value。

构建一个最简单的对象,然后输出整个json信息,最后读取json值,先调用isMember判断名称是否为root成员,如果是的话,那么就读取输出。


jquery json解析成表单 jquery解析json数组_jquery取json数组的值_07


输出的日志信息如下所示,大括号包含了一个“名称/值”对。


jquery json解析成表单 jquery解析json数组_json 数组_08


构建嵌套对象,第一个“名称/值”对中的“值”又是一个对象。


jquery json解析成表单 jquery解析json数组_json数组格式_09


输出的日志信息如下所示


jquery json解析成表单 jquery解析json数组_jquery json解析成表单_10


构建三层嵌套对象,第一个“名称/值”对中的“值”是一个对象,而该对象的“值”又是一个对象。依次类推,可以构建更多层的嵌套对象。


jquery json解析成表单 jquery解析json数组_json数组_11


输出的日志信息如下所示


jquery json解析成表单 jquery解析json数组_jquery取json数组的值_12


构建简单的数组,jsoncpp中构建数组是通过append的接口来创建的。读取数组之前,先调用isArray来判断对象是否为数组,如果是的话,再读取输出。这里需要注意数组的个数。从防御式编程的角度看,读取数组值之前,需要判断数组索引是否在有效范围内。


jquery json解析成表单 jquery解析json数组_json 数组_13


输出的日志信息如下所示,从这里我们也可以确定数组是可以单独作为独立json串出现的。之前一直都有一个误区,就是认为json一定要用大括号包括起来。


jquery json解析成表单 jquery解析json数组_jquery json解析成表单_14


构建对象和数组组成的json。首先创建一个数组,然后将其作为对象的值


jquery json解析成表单 jquery解析json数组_jquery取json数组的值_15


输出的日志信息如下所示


jquery json解析成表单 jquery解析json数组_json数组_16


最后再构建稍微复杂一点的json串,它是由对象、数组、对象来组成的,即对象的值是一个数组,而数组内部的值是由对象组成。


jquery json解析成表单 jquery解析json数组_json数组格式_17


输出的日志信息如下所示


jquery json解析成表单 jquery解析json数组_json数组格式_18


五、使用心得

  1. 读取json值之前,先判断其有效性,可以结合断言机制,调用isMember或者isArray来进行判断。
  2. 使用数组的时候,需要特别注意数组下标。

六、总结

json主要是由对象或数组创建而成,而它们的嵌套使用就可以创建复杂的json串,根据特定场景的需求来创建适用的json格式。