Cocos2d-x Lua库函数剖析(七)Json解析 Json.lua

本文详细介绍了JSON(JavaScript Object Notation)的语法和特性,包括对象和数组的表示、JSON与JS对象的关系,以及JSON.parse()和JSON.stringify()用于转换的方法。此外,还探讨了字符编码的基础知识,如字节、字符、编码和解码,以及在Lua中处理JSON的decode和encode操作。
摘要由CSDN通过智能技术生成

开始之前我们先介绍一下JSON,JSON(JavaScript Object Notation,JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON语法规则

  在JS语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串,数字,对象,数组等。但是对象和数组是比较特殊且常用的两种类型:

1.对象表示为键值对

2.数据由逗号分隔

3.花括号保存对象

4.方括号保存数组

JSON键/值对

JSON键值对是用来保存JS对象的一种方式,和JS对象的写法也大同小异,键/值对组合中键名写在前面并用双引号包裹,使用冒号:分隔,然后紧接着值:

{"firstName":"Json"}

JSON 与JS对象的关系

很多人搞不清楚JSON和Js对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:

JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质上是一个字符串。

var obj = {a:'Hello',b :'World};//这是一个对象,注意键名也是可以使用引号包裹的

var json = '{"a":"Hello","b":"World"}';//这是一个JSON字符串,本质是一个字符串

JSON和JS对象互转

要实现从JSON字符串转换为JS对象,使用JSON.parse()方法:

var obj  = JSON.parse('{"a":"Hello","b":"World"}'};//结果是{a:'Hello',b:'World'}

var json = JSON.stringify({a:"Hello',b:'World'});//结果是’{"a":"Hello","b":"World"}'

常用类型

任何支持的类型都可以通过JSON来表示,例如字符串,对象,数组等,但是对象和数组是比较特殊的两种类型。

对象:对象在JS中是使用花括号包裹{}起来的内容,数据结构为{key1:value1,key2:value2,...}的键值对结构。在面向对象的语言中,key为对象的属性,value为对应的值,键名可以使用整数和字符串来表示。值得类型可以是任何类型。

数组:数组在JS中是方括号[]包裹起来的内容,数据结构为{"java","javascript","vb",...]索引结构。在JS中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值得类型可以是任意类型。

下面我们再了解一下decode和endcode相关知识,要想了解这个,我们有必要学习几个概念。

字节:计算机数据的表示。8位二进制,可以表示无符号整数:0~255.下文,用“字节流”表示“字节"组成的串。

字符:英文字符"abc”,或者中文字符“你我他”。字符本身不知道如何在计算机中保存。

编码:按照某种规则将文本转换为“字节流”。

解码:将“字节流”按照某种规则转换成“文本”。

实际上,任何东西在计算机中表示,都需要编码。例如,视频要编码然后保存在文件中,播放的时候需要解码才能观看。

unicode:unicode定义了,一个“字符”和一个“数字”的对应,但是并没有规定这个“数字”在计算机中怎么保存。(就像在C中,一个整数既可以是int,也可以是short。unicode没有规定用int还是用short来表示一个“字符”)

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码,

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode 编码的字符串str2转换成gb2312编码。

现在我们可以开始看源码

-----------------------------------------------------------------------------
-- JSON4Lua: JSON encoding / decoding support for the Lua language.
-- json Module.
-- Author: Craig Mason-Jones
-- Homepage: http://json.luaforge.net/
-- Version: 0.9.40
-- This module is released under the MIT License (MIT).
-- Please see LICENCE.txt for details.
--
-- USAGE: 
-- This module exposes two functions:
--   encode(o)
--     Returns the table / string / boolean / number / nil / json.null value as a JSON-encoded string.
--   decode(json_string)
--     Returns a Lua object populated with the data encoded in the JSON string json_string.
--
-- REQUIREMENTS:
--   compat-5.1 if using Lua 5.0
--
-- CHANGELOG
--   0.9.20 Introduction of local Lua functions for private functions (removed _ function prefix).
--          Fixed Lua 5.1 compatibility issues.
--   		Introduced json.null to have null values in associative arrays.
--          encode() performance improvement (more than 50%) through table.concat rather than ..
--          Introduced decode ability to ignore /**/ comments in the JSON string.
--   0.9.10 Fix 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值