首页 前端知识 JSON 现代数据交换的利器

JSON 现代数据交换的利器

2024-06-21 09:06:41 前端知识 前端哥 702 762 我要收藏

JSON(JavaScript object Notation)是一种轻量级的数据交换格式,具有易读易写的特点。它由键值对组成,并且支持嵌套、数组等复杂的数据结构。

JSON的起源与发展

JSON的起源可以追溯到2001年,由道格拉斯·克罗克福特(Douglas Crockford)提出并定义。他设计JSON的初衷是创建一种轻量级、易于阅读和编写的数据交换格式,用于在不同系统之间进行数据交换。JSON的灵感来自于JavaScript对象字面量表示法,因此具有与之相似的语法结构,这也使得JSON与JavaScript语言天然地契合。

随着Web应用的迅速发展,JSON逐渐成为了Web开发中最常用的数据交换格式之一。其简洁、易读的特性,使得它在前后端数据传输以及API接口设计中得到了广泛的应用。同时,JSON也逐渐走出了Web开发领域,被用于移动应用、物联网、大数据等各个领域中。


JSON的结构

JSON 格式的语法要求相对简单,主要包括以下几个方面:

{
  "name": "czwrgz",
  "age": 20,
  "city": "Shang hai",
  "money": null,
  "isStudent": true,
  "hobbies": ["basketball", "x"],
  "address": {
    "street": "****",
    "city": "DQ"
  }
}

1、键值对(Key-Value Pair)

  • JSON中的数据是以键值对的形式存在的,即一个键对应一个值
  • 键和值之间使用冒号(:)进行分隔,键值对之间使用逗号(,)进行分隔
  • 键必须是字符串,而值可以是字符串、数字、布尔值、数组、对象等数据类型

2、对象(object)

  • JSON中的对象是由一对花括号{}包裹起来的
  • 对象中的数据以键值对的形式存储,键和值之间使用冒号(:)进行分隔,键值对之间使用逗号(,)进行分隔
  • 键是字符串,值可以是字符串、数字、布尔值、数组、对象等类型

3、数组(Array)

  • JSON中的数组是由一对方括号[]包裹起来的
  • 数组中的数据是按照顺序排列的,使用逗号(,)进行分隔
  • 数组中的元素可以是字符串、数字、布尔值、数组、对象等类型的数据

4、字符串(String)

  • JSON中的字符串是由双引号(" ")包裹起来的
  • 字符串可以包含任意字符,包括字母、数字、特殊字符

5、数字(Number)

  • JSON中的数字可以是整数或浮点数,可以包含正负号
  • JSON中的数字支持特殊格式,例如:十六进制、八进制

6、布尔值(Boolean)

  • JSON中的布尔值只有两种取值,true 和 false

7、空值(Null)

  • JSON中的空值用null表示,表示一个空对象、数组或变量

8、注释:JSON不支持注释,无法在JSON中添加注释


各个语言与JSON之间进行转换

将数据从不同编程语言转换为 JSON 格式,或者将 JSON 数据转换为不同编程语言的数据结构,通常需要使用各种编程语言提供的 JSON 解析和序列化库。以下是一些常见语言的示例:

1、Python:

  • 将Python对象转换为JSON

import json

# Python 对象
python_obj = {"name": "czwrgz", "age": 20, "city": "Shang hai"}

# 转换为 JSON 字符串
json_str = json.dumps(python_obj)

print(json_str)
  • 将JSON字符串转换为Python对象

import json

# JSON 字符串
json_str = '{"name": "czwrgz", "age": 20, "city": "Shang hai"}'

# 转换为 Python 对象
python_obj = json.loads(json_str)

print(python_obj)

2、JavaScript:

  • 将JavaScript对象转换为JSON

// JavaScript 对象
var javascript_obj = {name: "czwrgz", age: 20, city: "Shang hai"};

// 转换为 JSON 字符串
var json_str = JSON.stringify(javascript_obj);

console.log(json_str);
  • 将JSON字符串转换为JavaScript对象

// JSON 字符串
var json_str = '{"name": "czwrgz", "age": 20, "city": "Shang hai"}';

// 转换为 JavaScript 对象
var javascript_obj = JSON.parse(json_str);

console.log(javascript_obj);

3、C:

在C当中可以使用json-c库来处理JSON数据

  • 将C对象转换为JSON:

#include <stdio.h>
#include <json-c/json.h>

int main() {
    // 创建 JSON 对象
    json_object *json_obj = json_object_new_object();
    
    // 添加键值对到 JSON 对象中
    json_object_object_add(json_obj, "name", json_object_new_string("czwrgz"));
    json_object_object_add(json_obj, "age", json_object_new_int(20));
    json_object_object_add(json_obj, "city", json_object_new_string("Shang hai"));
    
    // 将 JSON 对象转换为字符串
    const char *json_str = json_object_to_json_string(json_obj);
    printf("JSON 数据: %s\n", json_str);
    
    // 解析 JSON 字符串
    json_object *parsed_json = json_tokener_parse(json_str);
    
    // 从解析后的 JSON 对象中获取数据
    json_object *name_obj, *age_obj, *city_obj;
    json_object_object_get_ex(parsed_json, "name", &name_obj);
    json_object_object_get_ex(parsed_json, "age", &age_obj);
    json_object_object_get_ex(parsed_json, "city", &city_obj);
    
    // 打印解析后的数据
    printf("解析后的数据:\n");
    printf("Name: %s\n", json_object_get_string(name_obj));
    printf("Age: %d\n", json_object_get_int(age_obj));
    printf("City: %s\n", json_object_get_string(city_obj));
    
    // 释放内存
    json_object_put(json_obj);
    json_object_put(parsed_json);
    
    return 0;
}
  • 将JSON字符串转换为JavaScript对象

#include <stdio.h>
#include <json-c/json.h>

int main() {
    // 假设我们有一个包含JSON数据的字符串
    const char *json_str = "{\"name\": \"czwrgz\", \"age\": 20, \"city\": \"Shang hai\"}";
    
    // 使用json-c库解析JSON字符串
    json_object *json_obj = json_tokener_parse(json_str);
    
    // 从JSON对象中获取数据
    json_object *name_obj, *age_obj, *city_obj;
    json_object_object_get_ex(json_obj, "name", &name_obj);
    json_object_object_get_ex(json_obj, "age", &age_obj);
    json_object_object_get_ex(json_obj, "city", &city_obj);
    
    // 将JSON数据转换为C语言中的数据
    const char *name = json_object_get_string(name_obj);
    int age = json_object_get_int(age_obj);
    const char *city = json_object_get_string(city_obj);
    
    // 打印转换后的数据
    printf("Name: %s\n", name);
    printf("Age: %d\n", age);
    printf("City: %s\n", city);
    
    // 释放JSON对象的内存
    json_object_put(json_obj);
    
    return 0;
}

4、Java:

在java当中可以使用org.json库或者更高效的第三方库,例如Gson或者Jackson来处理JSON数据

  • 使用Gson库将Java对象转换为JSON:

import com.google.gson.Gson;

// Java 对象
Person person = new Person("czwrgz", 20, "Shang hai");

// 使用 Gson 将 Java 对象转换为 JSON 字符串
Gson gson = new Gson();
String json_str = gson.toJson(person);

System.out.println(json_str);
  • 使用Gson库将JSON字符串转换为Java对象:

import com.google.gson.Gson;

// JSON 字符串
String json_str = "{\"name\": \"czwrgz\", \"age\": 20, \"city\": \"Shang hai\"}";

// 使用 Gson 将 JSON 字符串转换为 Java 对象
Gson gson = new Gson();
Person person = gson.fromJson(json_str, Person.class);

System.out.println(person.getName());

5、C#:

在C#中可以使用System.Text.Json 或者 Newtonsoft.Json(Json.NET)库来处理JSON

  • 使用System.Text.Json库将C#对象转换为JSON对象:

using System.Text.Json;

// C# 对象
var person = new { Name = "czwrgz", Age = 20, City = "Shang hai" };

// 使用 System.Text.Json 将 C# 对象转换为 JSON 字符串
string json_str = JsonSerializer.Serialize(person);

Console.WriteLine(json_str);
  • 使用System.Text.Json库将JSON字符串转换为C#对象:

using System.Text.Json;

// JSON 字符串
string json_str = "{\"Name\": \"czwrgz\", \"Age\": 20, \"City\": \"Shang hai\"}";

// 使用 System.Text.Json 将 JSON 字符串转换为 C# 对象
var person = JsonSerializer.Deserialize<Person>(json_str);

Console.WriteLine(person.Name);

JSON与XML

JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)都是用于数据交换的格式,但在结构和使用上有很大的不同。

JSON:

结构简洁JSON 使用简洁的键值对(key-value pairs)的结构表示数据
易于阅读和编写JSON 对人类来说比较易读,因为它的结构类似于 JavaScript 对象字面量
数据类型支持字符串、数字、布尔值、数组、对象和 null
使用范围JSON 在 Web 开发中得到广泛应用,特别是在与 JavaScript 后端交互时

XML:

结构复杂XML 使用标签(tags)的层次结构来表示数据,这些标签可以包含属性和子元素
通用性XML 不限于特定的语言或技术,因此在各种环境中被广泛使用
数据类型XML 可以描述更复杂的数据类型,例如日期、时间和自定义数据类型
扩展性XML 是可扩展的,可以通过定义自定义标签和数据结构来满足特定需求

两者之间的比较

  1. JSON 的结构相对更简单,因为它使用键值对表示数据,而 XML 使用标签的层次结构
  2. JSON 通常比 XML 更小,因为它的语法更简洁
  3. JSON 对于人类来说通常更易读和理解,因为它的语法更接近常规的编程语言
  4. 由于其简单的结构,JSON 的解析速度通常比 XML 更快
  5. XML 比 JSON 更灵活,因为它可以描述更多种类的数据类型和结构

选择使用 JSON 还是 XML 取决于具体的应用场景、需求和个人偏好。在大多数现代应用程序中,JSON 更为流行和常见,尤其是在 Web 开发领域。


JSON的应用

1、Web开发:

        在Web开发中,JSON广泛用于前后端数据传输以及API接口设计。前端通过AJAX请求获取JSON格式的数据,然后将其解析并展示在网页上。后端则通常会将数据库查询结果或其他数据转换为JSON格式,以便前端进行处理和展示

2、移动应用:

        移动应用通常需要与服务器进行数据交换,而JSON的简洁性和灵活性使得它成为了移动应用开发中常用的数据格式。移动应用可以通过HTTP请求获取JSON数据,然后解析并用于展示、缓存或其他操作

3、物联网:

        物联网设备可以将采集到的数据转换为JSON格式,然后通过网络传输给其他设备或服务器进行处理

4、大数据:

        大数据系统通常需要处理各种类型的数据,而JSON的灵活性使得它能够很好地适应不同类型的数据。大数据系统可以将数据转换为JSON格式进行存储和处理,然后根据需要进行查询、分析或其他操作

转载请注明出处或者链接地址:https://www.qianduange.cn//article/13191.html
标签
评论
发布的文章

Markdown基础与进阶语法

2024-06-30 22:06:12

零基础 HTML 入门(详细)

2024-06-30 22:06:09

CSS3基本语法

2024-06-30 22:06:51

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!