搜索
首页常见问题什么是json数据解析

什么是json数据解析

May 20, 2019 am 09:36 AM
json

json数据解析的方法:首先创建JSON文件;然后在类中包含“document.h”和“cocos-ext.h”头文件;接着通过FileUtils获得JSON文件路径,并通过Document对象解析JSON数据;最后获得不同类型的数据值即可。

什么是json数据解析

在网络通信过程中需要传输数据,JOSN数据解析的过程为:首先创建JSON文件,然后在类中包含document.h和cocos-ext.h头文件,接着通过FileUtils获得JSON文件路径,并通过Document对象解析JSON数据,最终获得不同类型的数据值。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它使得人们可以很容易地进行阅读和编写,同时也方便了机器进行解析和生成。JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C、C++、C#、Java、JavaScript、Perl和Python等),这些特性使得JSON成为理想的数据交换语言。

JSON数据解析

例如在Cocos2d.x根目录的external/json目录下面,是JSON处理的相关类,这里主要使用document.h这个头文件,该文件中的两个核心类是GenericValue和GenericDocument,GenericDocument继承GeneficValue。使用GenericDocument用来处理文档内容,如解析文档内容;而GenericValue主要处理值内容,即文档内部的key-value键值对内容,可以根据key获得value。GenericValue和GenericDocument都被重新进行了类型定义。所以可以使用类型定义后的名称。

ypedef GenericDocument>Document;

typedef GenericValue>Value;

Value重载了数组下标操作符[],所以我们可以使用该操作符,根据JSON文件中的key获得value。

const GenericValue & operator [] (const Ch* name) const{

const_cast(*this)[name];}

Value还提供了一组GetXXX方法,根据不同的数据类型,获得相应的值。

通过一个实例来演示如何解析JSON数据,操作步骤如下: 

创建JSON文件

在项目的classes文件夹下创建一个JSON文件,内容如下:

{"pets":["dog","cat"],"stuInfo":{
"stuAge":23,"stuName":"rose","birthday":"1990-01-12"},"username","tom","other":[true,30]}

在该文件中,pets是一个数组,表示宠物,有两个值dog和pet;stuInfo是一个学生信息;后面是一个usename;最后还有一个other数组。

在类中包含document.h和cocos-ext.h头文件

#include "cocos-ext.h"
#include "json/document.h"

通过FileUtils获得JSON文件路径

const char* file_path = FileUtils::getInstance()->fullPathForFilename("hello.json").c_str();
log("文件路径path=%s",file_path);

通过Document对象解析JOSN数据

//文档对象
rapidjson::Document dl;
//获得JSON字符串内容
std::string contentStr = FileUtils::getInstance()->getStringFromFile(file_path);
//解析
dl.Parse<0>(contentStr.c_str());
//输出JSON文件的内容
printf("%s\n",contentStr.c_str());

获得不同类型的数据值  

通过数组下标操作符[],根据key获得Value,并使用Value的GetXXX方法获得不同类型的数据值。 

//获取JSON中数组的方法(宠物数组)[dog,cat]
const rapidjson::Value & v=d1["pets"];
for(unsigned int i=0;i<v.Size();++i){
const rapidjson::Value & val=v[i];
log("%s",val.GetString());
}
//根据key获得value(学生信息)"stuInfo":{"stuAge":23,"stuName":"rose","birthday":"1990-01-12"}
const rapidjson::Value & v2=d1["stuInfo"];
//获得整型值
const rapidjson::Value&val1 = v2["stuAge"];
log("val.GetString()=%d",vall.GetInt());
//获得字符串值
const rapidjson::Value&val2 = v2["stuName"];
log("val.GetString()=%s",val2.GetString());
//获得字符串值
const rapidjson::Value&val3 = v2["birthday"];
log("val.GetString()=%s",val3.GetString());
//根据key获得value(other)"other":[true,30]
const rapidjson::Value&v3=d1["other"];
for(unsigned int i=0;i<v3.Size();++i){
    const rapidjson::Value&val=v3[i];
    if(val.IsBool()){
    log("%d",val.GetBool());
    }
    if(val.IsInt()){
    log("%d",val.GetInt());
    } 
}

以上是什么是json数据解析的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境