JSON概述

1 简介

JSON: JavaScript Object Notation(JavaScript 对象表示法)
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。

2 示例

{
    "sites": [
    { "name":"菜鸟教程" , "url":"www.runoob.com" }, 
    { "name":"google" , "url":"www.google.com" }, 
    { "name":"微博" , "url":"www.weibo.com" }
    ]
}

3 语法

3.1 JSON 值(分类如下)

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
    SON 数组在中括号中书写,数组可包含多个对象,如下
{
"sites": [
{ "name":"菜鸟教程" , "url":"www.runoob.com" }, 
{ "name":"google" , "url":"www.google.com" }, 
{ "name":"微博" , "url":"www.weibo.com" }
]
}
  • 对象(在大括号中)
    对象可以包含多个 key/value(键/值)对;
    key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null);
    key 和 value 中使用冒号(:)分割;
    每个 key/value 对使用逗号(,)分割。
  • null

3.2 JsonCpp语法

JsonCpp 的使用

3.3 概念

  • 对象
    是一组无序的名称/值对。 对象以{(左括号)开头,以}结尾(右括号)。 每个名称后跟:(冒号),名称/值对用(逗号)分隔。
  • 数组
    是有序的值集合。 数组以[(左括号)开头并以]结尾(右括号)。 值以(逗号)分隔。

  • 可以是双引号中的字符串,数字,或true或false或null,或对象或数组。 这些结构可以嵌套。

4 C#中操作方式

4.1 原始方式

按照JSON字符串自己来解析

4.2 通用方式

这种方式是使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后添加dll引用就能用。

  • 首先下载dll文件,下载地址http://json.codeplex.com/
  • 其次C#工程中引用dll
  • 最后:using Newtonsoft.Json
  • 具体使用见Linq to JSON的使用介绍

5 C++中操作方式

C++需要读写JSON文件,可使用Jsoncpp开源库,这个开源库是跨平台的。JSON的开源库很多,在官方网站底下有各种语言的Json开源库链接,推荐使用Jsoncpp。
Jsoncpp下载地址:https://github.com/open-source-parsers/jsoncpp
Jsoncpp有三个主要类:Value,Reader,Writer。注意Json::Value只能处理ANSI类型的字符串,如果程序使用Unicode编码,需要加一个转码函数。

5.1 VS 下

C++ 解析Json——jsoncpp

5.2 Qt 下

5.2.1 下载源码编译

C++ qt 使用jsoncpp json 读写
【C++】解析Json - Jsoncpp使用讲解

  • https://github.com/open-source-parsers/jsoncpp下载文件
  • python 运行解压文件夹下的.py文件
    在这里插入图片描述
  • 添加中工程中,直接使用
    在这里插入图片描述

5.2.2 接口介绍和使用

	Json::Value root(Json::objectValue);
    Json::Value item(Json::objectValue);
    item["ipone"] = 18862353666;
    item["name"] = "worthsen";
    root["wse"] = item;
    MyJson::WriteValue(MyDef::DIR_CONFIG + "jTest", root);

在这里插入图片描述
Json::Writer是个抽象类,被两个子类Json::FastWriter和Json::StyledWriter继承。
简单来说FastWriter就是无格式的写入,这样的Json看起来很乱没有格式,而StyledWriter就是带有格式的写入,看起来会比较友好。

5.2.3 注意事项

  • jsoncpp创建文件的时候,跟添加的顺序不相同,它是按照字母表给排序过的
  • 使用Json::Reader读取的数据是排序过的
  • 下面第一张下手写的,后面是读取完的,将读取到的内容重新写入就是排序过的
  • 可以改源码,让Json不排序,不过排序后更整洁
    在这里插入图片描述
    在这里插入图片描述

参考

1、runoob–JSON 教程
2、C#解析JSON字符串总结
3、Json的序列化和反序列化
4、使用Newtonsoft.Json.dll(JSON.NET)动态解析JSON、.net 的json的序列化与反序列化(一)
5、Newtonsoft.Json的API介绍
6、Newtonsoft.Json介绍
7、Linq to JSON的使用介绍
8、jsoncpp
9、C++ 解析Json——jsoncpp
10、C++ qt 使用jsoncpp json 读写
11、【C++】解析Json - Jsoncpp使用讲解
12、json.org/json-zh
13、QJson
14、jsoncpp封装和解析字符串、数字、布尔值和数组
15、JsonCpp 的使用
16、JsonCpp使用方法详解
17、JSON语法介绍

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读